153

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

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

<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>
4

5 回答 5

147

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

<body oncontextmenu="return false;">

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

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

于 2013-06-07T15:19:51.470 回答
121

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

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

于 2008-12-19T18:48:34.100 回答
19

我用过这个:

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

希望能帮助到你。

于 2013-08-17T14:02:48.540 回答
4

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

于 2008-12-19T18:59:05.297 回答
1

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

于 2008-12-19T19:01:22.157 回答