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

时间:2008-12-19 18:33:56

标签: 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>

5 个答案:

答案 0 :(得分:104)

如果您不关心每次用户尝试右键单击时都会向用户发出警告,请尝试将其添加到您的正文标记中

<body oncontextmenu="return false;">

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

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

答案 1 :(得分:85)

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

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

答案 2 :(得分:13)

我用过这个:

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

希望它有所帮助。

答案 3 :(得分:3)

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

答案 4 :(得分:1)

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