2008-12-19 151 views
89

不是说我试图阻止“查看源代码”或任何愚蠢的东西,但我为某些元素做了一些自定义上下文菜单。如何禁用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> 
+0

右键点击被禁用,但是,按住Ctrl键的点击仍然在Firefox中处于活动状态。请禁用按住Ctrl键或在Firefox中右键点击。 – 2017-10-09 07:04:37

回答

67

onContextMenu事件,在事件处理程序返回false。

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

+1

很高兴这工作。您一定要在所有目标浏览器上检查这一点。 – Triptych 2008-12-19 18:58:57

+1

似乎不适合我在谷歌浏览器(我唯一的目标浏览器) – Tgwizman 2012-07-20 18:36:45

+38

从事件处理程序返回false没有阻止默认的上下文菜单出现在Firefox或Chrome在我的情况。但调用event.preventDefault()没有......认为这可能有帮助。 – 2013-04-08 10:56:23

7

黑暗的一面 - 我从来没有见过一个能在Opera上工作的右键脚本脚本,即使Opera设置为允许右键截取(默认关闭)。

+0

是的,我打算在Opera – Jimmy 2008-12-19 18:54:19

3

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

1

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

82

如果你不关心他们每次尝试点击右键时提醒用户提供了一个消息,你可以添加以下到你的身体标记

<body oncontextmenu="return false;"> 

这将阻止所有访问上下文菜单(未只是从鼠标右键,但从键盘)

但是,真正没有意义的是添加一个右键单击disabler。具有基本浏览器知识的任何人都可以查看源代码并提取他们所需的信息。

10

我已经使用这个:

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

希望它有帮助。

相关问题