Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中禁用右键单击上下文菜单_Javascript_Contextmenu - Fatal编程技术网

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

如何在JavaScript中禁用右键单击上下文菜单,javascript,contextmenu,Javascript,Contextmenu,我并不是在试图阻止“查看源代码”或诸如此类的愚蠢行为,而是在为某些元素制作一些自定义上下文菜单 编辑:对答案的回应:我尝试过: <a id="moo" href=''> </a> <script type="text/javascript"> var moo = document.getElementById('moo'); function handler(event) { event = event || window.

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

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

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

var moo=document.getElementById('moo');
函数处理程序(事件){
event=event | | window.event;
if(事件停止播放)
event.stopPropagation();
event.cancelBubble=true;
返回false;
}
moo.innerHTML='右键单击此处';
moo.onclick=handler;
moo.onmousedown=处理器;
moo.onmouseup=handler;

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


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

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

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

如果你不在乎每次用户尝试右键单击时都会用消息提醒用户,请尝试将其添加到你的身体标签中

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


希望能有所帮助。

很高兴这起作用。不过,您肯定希望在所有目标浏览器上检查此项。在google chrome(我唯一的目标浏览器)上,这似乎不适用于我。在我的情况下,从事件处理程序返回false不会阻止默认上下文菜单出现在Firefox或chrome中。但是调用event.preventDefault()时。。。我想这可能会有帮助。我不得不使用
event.preventDefault()
返回false太多(“contextmenu”,(e)=>{e.preventDefault();返回false;});这在FF和Chrome中对我起了作用。例如,如果您正在构建一个仅限触摸的web应用程序,其中无论如何都没有任何右键单击。使用您的代码,开发人员可以防止上下文菜单弹出等丑陋的标准行为。在我的情况下:当您打开上下文菜单时,您可以右键单击菜单项本身,它将打开默认的浏览器菜单。这真的很烦人,尤其是当你的鼠标坏了,会右键点击两次时。这应该是可以接受的答案。如果你使用JQuery,你可以在页面加载时添加它$('body').attr('oncontextmenu','return false;'),如果您使用的是VanillaJS:document.body.addEventListener(“contextmenu”,函数(evt){evt.preventDefault();return false;});不再工作黑暗面注-我从未见过右键单击脚本可以在Opera上工作,即使Opera设置为允许右键单击拦截(默认情况下为关闭)。是的,我打算使用其他方式,尽管访问Opera相同操作的不太方便的方式右键单击被禁用,控件单击在Firefox中仍然处于活动状态。请在Firefox中禁用control click或shift right click。一个内心纯洁的人应该怎么做?我正在做一个html5游戏,右键点击会打乱游戏流程。