抑制浏览器默认右键菜单 - 优化?

3

好的,就我目前理解的,我们有两种方法。

首先是一些可以在特定脚本中使用的JavaScript。但是这会禁用所有右键功能。

window.oncontextmenu = function() {
        return false;
};

或者在HTML代码中可以这样写
<body oncontextmenu="return false;">

但我到目前为止还没有找到任何地方可以提供JavaScript或jQuery解决方案,使我可以将其应用于给定的选择器。这是不可能的,还是我误解了什么。

我发现在单击右键时,我的子菜单立即出现,然后是浏览器的默认菜单。我发现抑制它的唯一方法是将oncontextmenu设置为false。有更精细的解决方案吗?

进一步说明接受的答案

还成功地应用于使用委托的动态菜单:

$(document).on("contextmenu", "#existing_Flavours .field_Input_Left.flavour", function(){
        return false;   // suppress browsers default right click menu
});

1
不要这样做。这很烦人,你的用户要么A)再也不会访问你的网站,要么B)通过脚本拦截器和/或手动方式绕过它。 - jbabey
这是一个完全重复的内容。https://dev59.com/f3RB5IYBdhLWcg3wJUeu - Andrew Hubbs
我不能说我完全理解为什么会这样。但我相信你是对的。但肯定有一种方法可以阻止默认菜单在使用右键时出现。@jbabey - codepuppy
@Andrew - 关于你引用的问题,接受的答案是错误的contextmenu现在在jQuery中得到了支持。 - ahren
@ahren 他们两个都是正确的,而且这两个答案都在那个问题中,这个问题和这个一模一样。 - Andrew Hubbs
@Andrew - 接受答案的第一行写道:“jQuery中没有内置的oncontextmenu事件处理程序” - 这是错误的。 - ahren
1个回答

7
$('#mySelector').on('contextmenu', function(){
  return false;
});

只需像绑定其他事件一样绑定即可...

不过,如果您想要这样做来“保护”内容,那么它提供的安全性很小,很容易被绕过。

示例:http://jsfiddle.net/V3sWc/


不,我不想保护或阻止任何人查看代码,我只是想停止我的取消菜单(右键菜单)被默认菜单覆盖。由于@jbabey对此表示怀疑,我能否假设在jquery上下文中使用它不会导致他的脚本拦截器出现问题。顺便说一句,这正是我想找到的,非常感谢。我只是要测试一下。 - codepuppy
好的,我的选定元素在页面上其他地方没有显示默认的右键菜单。非常完美。 - codepuppy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接