如何在firefox中按下shift时禁用鼠标右键菜单?

sun*_*sun 5 javascript firefox jquery

我正在尝试禁用鼠标右键单击选项.所以我用contextmenubind函数来阻止它.这工作得很好,但是当shift与压沿mosue right clickcontextmenu绑定功能不触发,但它显示了contextmenu.意味着没有得到警报,但它显示菜单.

这是我试过的代码.

$(document).ready(function(){
    $(document).bind("contextmenu",function(e){
   alert('Context Menu event has fired!');
   return false;
}); 
});
Run Code Online (Sandbox Code Playgroud)

为了捕捉换档按钮按下并鼠标右键单击我正在执行以下代码,但这没有帮助.可能是我做错了什么.

$(document).ready(function(){

    $(document).bind("contextmenu",function(e){
   alert('Context Menu event has fired!');
   return false;
}); 

    var shift = false;
jQuery(document).on("keydown", function(event) {
            //check for shift key is pressed
        if (event.which === 16) { 
        shift = true;
                        }
});
jQuery(document).mousedown(function(e) {
     // e.which === 3 is for mouse right click
   if (e.which === 3 && shift === true) {
console.log("both action are triggered");
       return false; // how to stop the contextmenu action here
                           }
});
});
Run Code Online (Sandbox Code Playgroud)

我尝试给予e.preventDefault而不是返回false.我认为当单击shift时,上下文菜单事件本身不会在firefox中触发.

如何在这种情况下为firefox禁用鼠标右键?任何帮助或线索都会有所帮助

JSFIDDLE 注意 这不是在chrome中发生的.这只发生在firefox中.这是一个错误吗?

LaG*_*tte 4

这不是一个错误,这是一个功能!

http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#context-menus

用户代理可以提供绕过上下文菜单处理模型的方法,确保用户始终可以访问 UA 的默认上下文菜单。例如,用户代理可以处理按下 Shift 键的右键单击,这样就不会触发 contextmenu 事件,而是始终显示默认的上下文菜单。

根据设计,您将无法在 Firefox 中执行此操作。这很烦人,特别是对于复杂的网络应用程序和游戏来说,但它被硬编码到浏览器中,并且没有办法在 JavaScript 中禁用它(据我所知)。

归咎于标准,而不是 Mozilla。

  • 该标准说的是“可以”,而不是“必须”,所以是的,Mozilla 绝对是罪魁祸首。 (3认同)