关于javascript:如何停用IFRAME的右键

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; };