How to disable right click on IFRAME
我在MVC Web应用程序的IFrame中显示了文档内容。 内容不得复制和打印。 我试图使用两个函数style =" pointer-events:none;"禁用右键单击。 对于iframe,oncontextmenu =" return false"可以正常工作。
但是,右键单击时,将显示带有"查看框架源","查看源"的弹出窗口。 我该如何限制呢!
另外,如何限制打印屏幕选项。 我知道还有其他人可以从中捕获数据的实用程序。 但是客户端希望限制打印屏幕选项。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <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") |
1 2 3 4 5 | <body oncontextmenu="return false" onkeydown="if ((arguments[0] || window.event).ctrlKey) return false"> <iframe id="id1" src="" name="I1" scrolling="no" height="100%" width="100%" marginwidth ="0" marginheight="0" onload="disableContextMenu();" style="pointer-events:none;" /> |
请任何帮助表示赞赏。
为了禁用右键单击菜单,您可以使用以下代码段:
1 2 3 | document.oncontextmenu = function() { return false; }; |
我制作了一个显示效果的JSFiddle。
我们不能只禁用iframe的右键。由于iframe的内容是从其他来源加载的,因此我们的代码将无法对其进行处理。在这里,我找到了一个解决方案,这是我们唯一的选择。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <html> <head> Disable Context Menu <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;};; } </head> <body bgcolor="#FFFFFF" onload="disableContextMenu();" oncontextmenu="return false"> <iframe id="fraDisabled" width="528" height="473" src="local_file.html"></iframe> </body> </html> |
您的问题有点令人困惑,因为标题是关于右键单击,但是问题的根源是关于复制和粘贴以及关于使用打印屏幕按钮。虽然您可以使用右键单击按钮(已经有其他帖子回答并提供了充分的文献记录)来执行某些操作,但是通常,您的问题是如何防止人们访问代码/内容或从您的内容中打印出来。
这是不可能的。尽管您可以使某些用户更棘手,但对于有足够决心的用户来说,它永远不会成功。
首先,即使您(以某种方式)禁用了键盘上的"打印屏幕"按钮,那里也有许多屏幕捕获程序...而且我看不到(永远)如何能够从中检测到另一个执行此操作的程序。在网站代码的限制内。
任何JavaScript解决方案都可能失败,它们可以关闭JavaScript。
即使您设法阻止某些人查看源代码并复制HTML,也有一些人可以直接从网站上抓取内容。
我有一个朋友是图形设计师,他想这样做(在这种情况下,禁止人们复制图像)。我告诉他不要打扰,如果他们想将您放入公共领域的内容带走,他们会这样做。水印可能会有所帮助,但仅在某些情况下会有所帮助。就我个人而言,我会放弃这项任务而只是接受它,而专注于更有趣的任务。
1.)使用jQuery禁用iFrame中的右键单击
1 2 3 4 5 6 7 8 9 10 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"> // 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('New Div'); } |
在iFrame中调用" injectJS()"函数
1 | <iframe id="myiframe" width="528" height="473" onload="injectJS()"></iframe> |
2.)禁用网页中的右键单击
仅使用JavaScript
1 | document.addEventListener('contextmenu', event => event.preventDefault()); |
这是jQuery中的一个示例(注意:按下鼠标右键将触发三个事件:mousedown事件,contextmenu事件和mouseup事件)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // 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); } }); |
如果您有任何疑问,请在下面发表评论。
这对我来说很好:
1 2 3 | window.frames["your_iframe_id"].contentDocument.oncontextmenu = function(){ return false; }; |
1 | window.frames["your_iframe_id"].document.oncontextmenu = function(){ return false; }; |