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

我并不是想阻止“查看源代码”或者其他类似的傻事,但是我正在为某些元素制作一些自定义的上下文菜单。

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

<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>
268241 次浏览

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

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

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

您不能依赖于上下文菜单,因为用户可以停用它。大多数网站都想用这个功能来烦扰访问者。

如果您不关心用户每次试图右键单击时提示消息,可以尝试将这个消息添加到 body 标记中

<body oncontextmenu="return false;">

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

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

我用过这个:

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,我知道用户要么释放鼠标右键,要么按/释放 Context Menu 键。

希望能有帮助。