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

Jim*_*mmy 119 javascript contextmenu

并不是说我试图阻止"查看源代码"或任何愚蠢的东西,但我正在为某些元素制作一些自定义上下文菜单.

编辑:回答答案:我试过这个:

<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>
Run Code Online (Sandbox Code Playgroud)

by0*_*by0 110

如果您不想在每次尝试右键单击时向用户发出消息警报,请尝试将其添加到您的正文标记中

<body oncontextmenu="return false;">
Run Code Online (Sandbox Code Playgroud)

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

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

  • 有.例如,如果您正在构建仅限触摸的Web应用程序,那么无论如何都没有任何右键单击.使用您的代码,开发人员可以防止丑陋的标准行为,如上下文菜单弹出窗口. (12认同)
  • 这应该是公认的答案. (3认同)

Tri*_*ych 91

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

您还可以event.button在某些浏览器中捕获click事件并检查触发事件的鼠标按钮.

  • 从事件处理程序返回false并未阻止默认上下文菜单在我的情况下出现在Firefox或Chrome中.但是调用event.preventDefault()确实......认为这可能会有所帮助. (56认同)
  • 我也必须在 Chrome 77.0 中使用“event.preventDefault();”和“return false;”。 (7认同)
  • div.addEventListener("contextmenu", ( e )=&gt; { e.preventDefault(); return false; } ); 这对我在 FF 和 Chrome 中有用。 (6认同)

ElD*_*239 14

我用过这个:

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){
 ...
}
Run Code Online (Sandbox Code Playgroud)

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

希望能帮助到你.