【问题标题】:Detect click in iframe (React.js)检测 iframe 中的点击(React.js)
【发布时间】:2020-07-21 12:21:23
【问题描述】:

第一个能给我有用的东西的人,我真的会给 Venmo 10 美元。请帮忙。

我有一个 iframe,我想阻止人们下载内容。我已经使用了#toolbar=0,但用户仍然可以右键单击下载。我知道完全阻止下载是不可能的,但我只是在寻找一种解决方案来阻止基本用户轻松下载。

我尝试用透明图像覆盖 iframe 以阻止右键单击,但这使得无法滚动浏览文档。

现在的目标:检测到右键单击iframe,并禁用上下文菜单。

我现在的代码是:

componentDidMount(){
 document.getElementById('myIframe').addEventListener("click",this.handleClick);
}
componentWillUnmount(){
 document.getElementById("myIframe").removeEventListener("click", this.handleClick);
}

render(){
  return(
     <div className="PDFs">
       <iframe id="myIframe" src={PDF + "#toolbar=0"} width="100%" height="800px" className="Viewer"/> 
     </div>
  );
}

但只有当您的鼠标位于 iframe 轮廓的确切像素线上时,它才有效。不是很有用。

如果您能找到任何方法来阻止下载 PDF 而不将 PDF 转换为任何内容并且不阻止对 PDF 的滚动访问,我会接受的。

更多信息:将显示此内容的页面将仅显示此查看器,不会显示其他内容。如果我可以禁用整个页面的上下文菜单,那就太好了。

我也已经尝试过使用“onClickDown”和“onContextMenu”,但它们都不起作用,除非我用错了。

【问题讨论】:

  • 你所要求的基本上是不可能的。即使您确实禁用了上下文菜单,用户仍然可以打开 devtools,检查网络请求并以这种方式下载数据。只要您的数据从某个服务器传输到用户的浏览器,此时它就与“他们的数据”一样好 - 他们可以用它做任何他们想做的事情(当然可能会产生法律后果)。
  • 完全没问题。我只是想阻止基本用户点击几下就可以直接下载按钮。如果你有办法做到这一点,我很乐意听到。
  • 我查看了 CSP 设置,但您也无法使用这些设置。 Iframe 模拟另一个网站,因此您不能只是更改它的内容。为什么你需要这个网站的 iframe,我可以询问 iframe 源的链接吗?
  • 嗯,有道理。我只需要一个 iframe 来显示 pdf。如果您知道一种显示更可编辑的 pdf 的方式,那就太好了。 iframe 源将只显示 pdf,因此任何 pdf 都可以代替它。如果你需要占位符 pdf,那么我可以给你发我的数学作业哈哈哈。

标签: html reactjs iframe


【解决方案1】:
document.getElementById('myIframe').contentDocument.addEventListener('contextmenu', event => event.preventDefault());

【讨论】:

  • 这不起作用:(。我仍然可以在 pdf 中选择文本并右键单击下载。
  • 它对你有用吗?如果是这样,你能告诉我你做了什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 2021-04-13
  • 2011-05-23
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多