Javascript 在这种情况下,如何重新启用上下文菜单?

Javascript 在这种情况下,如何重新启用上下文菜单?,javascript,events,contextmenu,Javascript,Events,Contextmenu,不行 编辑:document.oncontextmenu=null不起作用 另外,我不能引用listener函数,因为我不是阻止上下文菜单的网站所有者。与其禁用上下文菜单,不如指定右键单击事件 如果你真的非常绝望,请在调用addEventListener之前尝试添加这个。它可以在FF和Chrome中工作。我没有检查其他任何东西 document.addEventListener('contextmenu', function (e) { e.preventDefault() e.

不行

编辑:
document.oncontextmenu=null
不起作用


另外,我不能引用listener函数,因为我不是阻止上下文菜单的网站所有者。

与其禁用上下文菜单,不如指定右键单击事件


如果你真的非常绝望,请在调用
addEventListener
之前尝试添加这个。它可以在FF和Chrome中工作。我没有检查其他任何东西

document.addEventListener('contextmenu', function (e) {
    e.preventDefault()
    e.stopPropagation()
    e.returnValue = false
    e.cancleBubble = true
})

这可能不是做事情的最佳方式,但应该是针对您的具体示例所做的工作:)

在这种情况下,我使用bookmarklet:

document.superListener = document.addEventListener;
document.addEventListener = function(type, listener, useCapture){
    if(type != 'contextmenu')
        document.superListener(type, listener, !!useCapture);
};

你所说的“道德”是什么意思?在我看来,故意禁用上下文菜单的网站应该禁止或不运行其脚本。(我使用NoScript。)我通常通过右键单击并选择后退或前进来导航。想要上下文菜单工作并没有什么不道德的。网站作者首先禁用它是愚蠢的。您是否尝试过
document.oncontextmenu=null?我不是禁用上下文菜单的人。有些网站禁用了它,我想破坏它。哦,你是说作为一个greasemonkey脚本还是什么?谢谢你的回答。似乎不可能在通话“之后”重新启用上下文菜单……这一次效果很好。只需将选项限制为“contextmenu”。
javascript:(function(w){
    var arr = ['contextmenu','copy','cut','paste','mousedown','mouseup','beforeunload','beforeprint'];
    for(var i = 0, x; x = arr[i]; i++){
        if(w['on' + x])w['on' + x] = null;
        w.addEventListener(x, function(e){e.stopPropagation()}, true);
    };
    for(var j = 0, f; f = w.frames[j]; j++){try{arguments.callee(f)}catch(e){}}})(window);