如何防止iframe中的上下文菜单?

时间:2017-07-17 23:08:30

标签: jquery html

我试图阻止浏览器的上下文菜单显示在活动上'右键单击'关于每个元素' iframe'但它不起作用 - 上下文菜单仍在工作中 这是我的代码:



$(document).ready(function () {
       $("iframe").each(function(){
           $(this).on("contextmenu",function(e){
               e.preventDefault(); //return false;
           });
       });
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<iframe src="http://www.google.com"></iframe>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:1)

浏览器中的每个窗口,选项卡和iframe都是不同的安全上下文,每个窗口都是另一个沙箱。这是为了防止一个页面被篡改。

因此,iframe上的样式,脚本和脚本访问仅限于iframe元素本身,而不是其任何内容。同样,出于相同的安全原因,iframe无法访问其父级。

阻止iframe中的上下文菜单的唯一方法是在iframe中加载上下文菜单预防脚本。如果您无权访问iframe的内容,则无法访问。如果是这样,您可能会干扰第三方网站在iframe中的运作方式。

答案 1 :(得分:0)

我已经创建了JSFiddle来尝试执行您正在寻找的内容,但似乎您在iframe代码上无法执行的操作。浏览器将强制执行iframes&amp ;;的特定规则。甚至覆盖了Web开发人员的CSS&amp; JS编程代码。

jQuery方法的.contextmenu()示例适用于div标记。

在我的JSFiddle演示中,右键菜单似乎仅在lime green div标签上被阻止,而在iframe标签上则没有。

(即使尝试将iframe包装在div标签内部并为div标签提供纯色背景颜色,也会导致浏览器强制iframe的z-index弹出div标签的z-index之上因此,弹出彩色div并覆盖开发人员告诉浏览器要做的事情。它可以阻止人们将iframe隐藏在其他内容的下方并加载广告或脚本,而无需用户能够看到或访问隐藏的内容。)

您可能需要尝试从iframe的src文件中加载类似的内容:

<script>
    $(function() {
        $("body").contextmenu(function(e) {
            e.preventDefault();
        });
    });
</script>

它可以用于身体标签,但我还没有确认它会起作用。如果它确实有效,那么它只适用于您的网页,这些网页会被加载到iframe标记中。不是别人的网页。

抱歉,您可能无法在此方案中执行您想要执行的操作。随意玩我的JSFiddle。也许你可以找到一个可以接受的解决方案。 :)

答案 2 :(得分:0)

如果使用的是jquery。 将此代码插入到body标签末尾之前的iframe页面中:

VBoxManage hostonlyif remove vboxnet1

这将完全禁用您的iframe上下文菜单。在chrome浏览器上进行了测试。