如何禁用右键单击IFRAME

时间:2014-10-27 07:48:25

标签: javascript jquery html iframe model-view-controller

我在MVC Web应用程序的IFrame上显示了文档内容。不得复制和打印内容。我尝试使用两个函数style =" pointer-events:none;"禁用右键单击。 oncontextmenu ="返回false"对于Iframe来说,这是正常的。 但是在右键单击时,弹出“查看框架源”,“查看源代码”'正在展示。我怎么能限制这个。 另外,如何限制打印屏幕选项。我知道还有其他任何人可以捕获数据的工具。但是客户想要限制打印屏幕选项。

<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" height="100%" width="100%" marginwidth ="0" marginheight="0" onload="disableContextMenu();" style="pointer-events:none;"  /> 



</div>

请任何帮助赞赏.. !!

6 个答案:

答案 0 :(得分:6)

要停用右键菜单,您可以使用以下代码段:

document.oncontextmenu = function() { 
    return false; 
};

我制作了显示效果的JSFiddle

答案 1 :(得分:1)

你的问题有点令人困惑,因为标题是右键点击,但问题的bddy是关于复制和粘贴以及使用打印屏幕按钮。虽然您可以使用右键单击按钮(已经通过其他帖子回答并且有详细记录)来执行某些操作,但通常您的问题是如何阻止人们访问代码/内容或打印出您的内容。

这是不可能的。虽然你可以让某些用户更加棘手,但对于那些有足够决心的人来说,它永远不会成功。

首先,即使您(某种程度上)禁用了键盘上的打印屏幕按钮,也有很多屏幕捕获程序......我无法看到它是如何(可能)检测到的另一个程序是在网站代码的限制范围内完成的。

任何javascript解决方案都可能失败,他们可以关闭javascript。

即使您设法阻止某人查看源代码并复制HTML,但有些人可能直接从网站上抓取内容。

我有一位朋友,他是一名平面设计师,他想这样做(在这种情况下禁用复制图像的人)。我告诉他不要打扰,如果他们想把你放入公共领域的内容拿走,他们会的。水印可能有所帮助,但仅限于某些情况。就个人而言,我放弃了这项任务,接受它,专注于更有趣的任务。

答案 2 :(得分:0)

window.frames["your_iframe_id"].document.oncontextmenu = function(){ return false; };

答案 3 :(得分:0)

您不能覆盖跨源的任何事件(“单击”或“右键单击”)。我尝试在Chrome浏览器中执行此操作,但出现以下错误。  Chrome error while trying to access cross origin.

答案 4 :(得分:0)

这对我来说很好:

window.frames["your_iframe_id"].contentDocument.oncontextmenu = function(){
 return false; 
};

答案 5 :(得分:0)

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" width="528" height="473"  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); 
} 
});

如果您有任何问题,请在下面留下评论。