我不是以网络开发人员的身份问这个问题,而是以最终用户的身份问这个问题。
我正在使用几个网站(Google Drive、Evernote 等),这些网站都有在右键单击事件时激活的上下文菜单。但是,在我的浏览器(Firefox)上,如果我右键单击,它会在网站 Web 开发人员实现的上下文菜单之上打开我的导航器上下文菜单。如果我再次右键单击,则导航器上下文菜单会消失,为 Web 应用程序上下文菜单留出空间。
作为最终用户,我如何才能禁用特定网站上的右键单击?如果可能的话,我希望可以“按需”实现此功能,即能够在需要时重新激活右键单击。
是否有现成的插件或 JavaScript 技巧可用于此目的?如果没有,我应该遵循哪个方向来编写这样的代码?
答案1
我不知道有任何扩展可以实现这一点,但创建一个并不难。您可以使用附加 SDK,最容易通过 Add-on Builder 使用,这是一个用于创建基于 SDK 的扩展的 Web 应用程序。高级 SDK 模块不允许您直接访问浏览器窗口,但是,您必须使用未记录的模块来window-utils
实现这一点。以下代码有效main.js
:
var icons = {
"enabled": "http://www.mozilla.org/favicon.ico",
"disabled": "http://www.mozilla.org/media/img/favicon.ico"
};
function disableContextMenu(event)
{
event.preventDefault();
}
require("widget").Widget({
id: "disable-context-menu",
label: "Disable Context Menu",
contentURL: icons.enabled,
onClick: function(view)
{
var window = require("window-utils").activeBrowserWindow;
var menu = window.document.getElementById("contentAreaContextMenu");
if (this.contentURL == icons.enabled)
{
menu.addEventListener("popupshowing", disableContextMenu, false);
this.contentURL = icons.disabled;
}
else
{
menu.removeEventListener("popupshowing", disableContextMenu, false);
this.contentURL = icons.enabled;
}
}
});
其实就是这么简单 - 将此事件处理程序添加到上下文菜单会禁用它,删除该事件处理程序会将其重新打开。扩展还会切换图标以指示其状态。就是这样。当然,如果您想保留每个选项卡的状态,那么您将需要更复杂的逻辑。祝你好运!
答案2
转到“工具”>“选项”下的“内容”选项卡。单击先进的...按钮旁边启用 JavaScript复选框。这将打开“高级 JavaScript 设置”对话框。切换复选框选项禁用或替换上下文菜单在所呈现的列表中。
答案3
仅供参考,对于较新版本的 FireFox(以防有人像我一样试图解决这个问题)
菜单选项工具 > 选项 > 内容在较新的 FireFox 版本(如 78.9)上不可用。但是,您可以访问关于:配置并搜索dom.event.contextmenu.enabled,将其设置为真的然后网站可以有选择地替换右键单击上下文菜单。