如何在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> 

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

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

如果您不关心每次尝试右键单击时都会提示用户,请尝试将其添加到您的身体标记中

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

希望它有帮助。

黑暗的侧面说明 – 我从来没有见过一个右键点击脚本,即使Opera设置为允许右键截取(这是默认closures),将在Opera上工作。

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

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