如何在 JavaScript 中禁用右键单击上下文菜单

IT技术 javascript contextmenu
2021-02-01 22:27:08

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

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

<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>
5个回答

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

<body oncontextmenu="return false;">

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

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

同样在我的情况下:当您打开上下文菜单时,您可以右键单击它自己的菜单项,它将打开默认的浏览器菜单。这真的很烦人,尤其是当您的鼠标坏了并且会触发两次右键单击时。
2021-03-17 22:27:08
这应该是公认的答案。
2021-03-27 22:27:08
如果您使用的是 JQuery,则可以在页面加载时添加它。$('body').attr('oncontextmenu','return false;')
2021-04-01 22:27:08
有。例如,如果您正在构建一个仅限触摸的网络应用程序,那么无论如何都没有任何右键单击。使用您的代码,开发人员可以防止像上下文菜单弹出这样的丑陋标准行为。
2021-04-04 22:27:08
如果您使用的是 VanillaJS: document.body.addEventListener("contextmenu", function(evt){evt.preventDefault();return false;});
2021-04-13 22:27:08

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

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

div.addEventListener("contextmenu", ( e )=> { e.preventDefault(); return false; } ); 这在 FF 和 Chrome 中对我有用。
2021-03-15 22:27:08
我不得不在 Chrome 77.0 中使用event.preventDefault();and return false;
2021-03-19 22:27:08
在 google chrome 上似乎对我不起作用(我唯一的目标浏览器)
2021-03-31 22:27:08
在我的例子中,从事件处理程序返回 false 并没有阻止默认上下文菜单出现在 Firefox 或 Chrome 中。但是调用 event.preventDefault() 确实......认为这可能会有所帮助。
2021-04-02 22:27:08
很高兴这有效。不过,您肯定想在所有目标浏览器上检查这一点。
2021-04-10 22:27:08

我用过这个:

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,我知道用户要么释放了鼠标右键,要么按下/释放了上下文菜单键。

希望能帮助到你。

不再有效
2021-03-20 22:27:08

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

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

那清心的人应该怎么做呢?我正在做一个 html5 游戏,右键单击会破坏它的流程。
2021-04-04 22:27:08