【问题标题】:How to disable right-click context-menu in JavaScript [duplicate]如何在 JavaScript 中禁用右键单击上下文菜单 [重复]
【发布时间】:2010-09-27 18:19:22
【问题描述】:

并不是我试图阻止“查看源代码”或类似的愚蠢行为,而是我正在为某些元素制作一些自定义上下文菜单。

编辑:对答案的回应:我试过这个:

<a id="moo" href=''> </a>

<script type="text/javascript">
    var moo = document.getElementById('moo');

    function handler(event) {
        event = event || window.event;

        if (event.stopPropagation)
            event.stopPropagation();

        event.cancelBubble = true;
        return false;
    }

    moo.innerHTML = 'right-click here';

    moo.onclick = handler;
    moo.onmousedown = handler;
    moo.onmouseup = handler;
</script>

【问题讨论】:

  • 附注 - 我从未见过可以在 Opera 上运行的右键单击脚本,即使 Opera 设置为允许右键单击拦截(默认情况下是关闭的)。跨度>
  • 是的,我打算为 Opera 提供访问相同操作的替代方法,尽管不太方便
  • 右键单击被禁用,但是,在 Firefox 中,控制单击仍然有效。请在 Firefox 中禁用 control-click 或 shift right click。

标签: javascript contextmenu


【解决方案1】:

如果您不关心每次尝试右键单击时都用消息提醒用户,请尝试将其添加到您的正文标签中

<body oncontextmenu="return false;">

这将阻止对上下文菜单的所有访问(不仅从鼠标右键,而且从键盘)

但是,添加右键单击禁用器确实没有意义。任何具有基本浏览器知识的人都可以查看源代码并提取他们需要的信息。

【讨论】:

  • 有。例如,如果您正在构建一个仅触控的 Web 应用程序,无论如何都没有任何右键单击。使用您的代码,开发人员可以防止丑陋的标准行为,如上下文菜单弹出。
  • 在我的例子中:当你打开一个上下文菜单时,你可以右键单击它自己的菜单项,它会打开默认的浏览器菜单。这真的很烦人,尤其是当您的鼠标坏了并且会触发两次右键单击时。
  • 这应该是公认的答案。
  • 如果您使用的是 JQuery,您可以在页面加载时添加它。 $('body').attr('oncontextmenu','return false;')
  • 如果你使用 VanillaJS:document.body.addEventListener("contextmenu", function(evt){evt.preventDefault();return false;});
【解决方案2】:

捕获onContextMenu事件,并在事件处理程序中返回false。

在某些浏览器中,您还可以捕获单击事件并使用event.button 检查哪个鼠标按钮触发了该事件。

【讨论】:

  • 很高兴这有效。不过,您肯定希望在所有目标浏览器上检查这一点。
  • 在谷歌浏览器(我唯一的目标浏览器)上似乎不适合我
  • 在我的情况下,从事件处理程序返回 false 并没有阻止默认上下文菜单出现在 Firefox 或 Chrome 中。但是调用 event.preventDefault() 确实......认为这可能会有所帮助。
  • 我不得不在 Chrome 77.0 中使用 event.preventDefault();return false;
  • div.addEventListener("contextmenu", ( e )=> { e.preventDefault(); return false; } );这在 FF 和 Chrome 中对我有用。
【解决方案3】:

我用过这个:

document.onkeydown = keyboardDown;
document.onkeyup = keyboardUp;
document.oncontextmenu = function(e){
 var evt = new Object({keyCode:93});
 stopEvent(e);
 keyboardUp(evt);
}
function stopEvent(event){
 if(event.preventDefault != undefined)
  event.preventDefault();
 if(event.stopPropagation != undefined)
  event.stopPropagation();
}
function keyboardDown(e){
 ...
}
function keyboardUp(e){
 ...
}

然后我在最后两个函数中捕获 e.keyCode 属性 - 如果 e.keyCode == 93,我知道用户要么释放了鼠标右键,要么按下/释放了上下文菜单键。

希望对你有帮助。

【讨论】:

  • 不再有效
【解决方案4】:

如果您的页面确实依赖于人们无法看到该菜单这一事实,您应该知道现代浏览器(例如 Firefox)让用户决定他是否真的想要禁用它。所以你根本无法保证菜单会被真正禁用。

【讨论】:

    【解决方案5】:

    您不能依赖上下文菜单,因为用户可以禁用它。大多数网站都希望使用该功能来惹恼访问者。

    【讨论】:

    • 清心的人该怎么办呢?我正在做一个 html5 游戏,右键单击会破坏游戏流程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 2019-12-17
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    相关资源
    最近更新 更多