如何禁用对 IFRAME 的右键单击
Posted
技术标签:
【中文标题】如何禁用对 IFRAME 的右键单击【英文标题】:How to disable right click on IFRAME 【发布时间】:2014-12-22 08:44:36 【问题描述】:我在 MVC Web 应用程序的 IFrame 上显示了一个文档内容。内容不得复制和打印。我尝试使用两个函数 style="pointer-events:none;" 禁用右键单击Iframe 的 oncontextmenu="return false" 工作正常。 但是在右键单击时,会显示“查看框架源”、“查看源”的弹出窗口。我怎么能限制这个。! 另外,如何限制打印屏幕选项。我知道还有其他实用程序,任何人都可以从中捕获数据。但是客户想限制打印屏幕选项。
<script lang=javascript>
function clickIE()
if (document.all)
return false;
function clickNS(e)
if (document.layers || (document.getElementById && !document.all))
if (e.which == 2 || e.which == 3)
return false;
if (document.layers)
document.captureEvents(Event.MOUSEDOWN);
document.onmousedown = clickNS;`enter code here`
else
document.onmouseup = clickNS;
document.oncontextmenu = clickIE;
document.oncontextmenu = new Function("return false")
<body oncontextmenu="return false" onkeydown="if ((arguments[0] || window.event).ctrlKey) return false" >
<div id="div1" style="background-color:Red; height:120px">
<iframe id="id1" src="" name="I1" scrolling="no" marginwidth ="0" margin onload="disableContextMenu();" style="pointer-events:none;" />
</div>
请任何帮助表示赞赏.. !!
【问题讨论】:
您不能阻止用户复制可以看到的内容。我的意思是,一点也不。 哦,但我希望有一个迂回的解决方案:-)。我们可以限制 iframe 内容的打印屏幕选项吗? 我的手机上有摄像头。大声笑 如果您的意思是要阻止他们截屏,那么不,您不能。您能做的最好的事情就是让我在打印时禁用文本选择、右键单击并从 DOM 中删除元素变得超级困难(仅限 IE) 防止屏幕截图的唯一方法是首先不向用户显示内容。所以完全放弃这个项目,不要截图!耶! ;) 【参考方案1】:为了禁用右键菜单,您可以使用以下 sn-p:
document.oncontextmenu = function()
return false;
;
我做了一个JSFiddle来显示效果。
【讨论】:
如果我在开发工具中禁用 JavaScript 会怎样? 然后就可以再次获得右键菜单了。我认为没有(我希望没有)任何方法可以禁用用户的浏览器功能。 如何在 iFrame 中禁用? 这不适用于 iFrame。请参阅下面我给出的答案。【参考方案2】:您的问题有点令人困惑,因为标题是关于右键单击,但问题的核心是关于复制和粘贴以及使用打印屏幕按钮。虽然您可以使用右键单击按钮来做一些事情(其他帖子已经回答并有据可查),但通常您的问题是如何防止人们访问代码/内容或打印出您的内容。
这是不可能的。虽然您可以让某些用户更棘手,但对于那些有足够决心的人来说,它永远不会成功。
首先,即使您(以某种方式)禁用了键盘上的打印屏幕按钮,也有许多屏幕捕获程序......而且我看不出它(永远)如何检测到另一个程序在网站代码的限制范围内执行此操作。
任何 javascript 解决方案都可能失败,他们可以关闭 javascript。
即使您设法阻止某人查看源代码和复制 html,也有人可能会直接从网站上抓取内容。
我有一个朋友是平面设计师,他想这样做(在这种情况下禁止人们复制图像)。我告诉他不要打扰,如果他们想把你放到公共领域的内容拿走,他们会的。水印可能会有所帮助,但仅在某些情况下。就我个人而言,我会放弃这项任务并接受它,并专注于更有趣的任务。
【讨论】:
恕我直言,这个问题是一个“不是真正的问题”候选人,应该关闭,就这么简单。我还要补充一点,这些行为阻止解决方案对用户来说更烦人,他们不会想回来,而不是在任何方面都可以防止复制。十几年前,互联网上到处都是蹩脚的脚本,上面写着“不要复制!!!”每当您想与页面交互时。最好的办法是告诉客户这不能做,部分做会伤害他的听众。【参考方案3】:这对我很有效:
window.frames["your_iframe_id"].contentDocument.oncontextmenu = function()
return false;
;
【讨论】:
【参考方案4】:我们不能只禁用对 iframe 的右键单击。由于 iframe 内容是从另一个来源加载的,因此我们的代码将无法在其上运行。在这里,我找到了一个解决方案,这是我们唯一的选择。
<html>
<head>
<title>Disable Context Menu</title>
<script type="text/jscript">
function disableContextMenu()
window.frames["fraDisabled"].document.oncontextmenu = function()alert("No way!"); return false;;
// Or use this
// document.getElementById("fraDisabled").contentWindow.document.oncontextmenu = function()alert("No way!"); return false;;;
</script>
</head>
<body bgcolor="#FFFFFF" onload="disableContextMenu();" oncontextmenu="return false">
<iframe id="fraDisabled" src="local_file.html"></iframe>
<div style="width:528px;height:473px;background-color:transparent;position:absolute;top:0px;">
</body>
</html>
【讨论】:
【参考方案5】:1.) 使用 jquery 禁用 iFrame 中的右键单击
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js">
</script>
// Function to block the right click in the iFrame
<script type="text/jscript">
function injectJS()
var frame = $('iframe');
var contents = frame.contents();
var body = contents.find('body').attr("oncontextmenu", "return false");
var body = contents.find('body').append('<div>New Div</div>');
</script>
在 iFrame 中调用“injectJS()”函数
<iframe id="myiframe" onload="injectJS()"></iframe>
2.) 在网页
中禁用右键单击仅使用 javascript
document.addEventListener('contextmenu', event => event.preventDefault());
这里是一个 jQuery 示例(注意:按下鼠标右键会触发三个事件:mousedown 事件、contextmenu 事件和 mouseup 事件)
// With jQuery
$(document).on(
"contextmenu": function(e)
console.log("ctx menu button:", e.which);
// Stop the context menu
e.preventDefault();
,
"mousedown": function(e)
console.log("normal mouse down:", e.which);
,
"mouseup": function(e)
console.log("normal mouse up:", e.which);
);
如果您有任何问题,请在下方留言。
【讨论】:
不工作。它不会像您预期的那样在 iframe 的 标记上添加“oncontextmenu="false"”。【参考方案6】:window.frames["your_iframe_id"].document.oncontextmenu = function() return false; ;
【讨论】:
我尝试使用同一行代码,但它不起作用。现在不显示复制、打印选项。但是“查看源代码”和“查看框架源代码”、“另存为”选项仍然可见。有什么办法限制这个..谢谢 客户端请求了这个功能,这就是我提出这个问题的原因。无论如何,谢谢大家花时间回复以上是关于如何禁用对 IFRAME 的右键单击的主要内容,如果未能解决你的问题,请参考以下文章
使用 JavaScript 如何禁用右键单击或单击滚动条时如何在右键单击窗口中删除检查元素选项