javascript - 使用附加 SDK 在 Firefox 中自定义上下文菜单?

标签 javascript firefox-addon-sdk

我希望将单个菜单项添加到显示的 firefox 上下文菜单中 仅当用户右键单击特定 url 时。我有一个测试网址的功能。 我曾经通过订阅“popupshowing”事件来做到这一点,并且:

var item = document.getElementById("custom-menu-id");
if (item) // show only for specific links
    item.hidden = gContextMenu.onLink && acceptableURL(gContextMenu.linkURL);

我现在正在尝试使用附加 SDK,但我无法再访问 gContextMenu。 文档中的这个片段对我不起作用:

var cm = require("sdk/context-menu");
cm.Item({
    label: "Copy name to clipboard",
    context: cm.URLContext("http://scholar.google*"), 
    contentScript: 'self.on("context", function(node) {return true; });'
});

在这里,我认为应该可以获得类似 node.URL 的东西并进行测试, 但它不起作用。也许有人可以建议如何从 sdk 访问 gContextMenu 或如何从节点或其他东西获取 URL。

最佳答案

此代码应仅在右键单击指向 stackoverflow.com 的链接时显示菜单项:

在你的主模块 main.js 中:

exports.main = function() {
    require("sdk/context-menu").Item({
        label: "stack overflow link",
        context:  require("sdk/context-menu").SelectorContext("a[href]"), 
        contentScriptFile: require("sdk/self").data.url("check-node.js"),
        onMessage: function(msg){},
    });
};

在您的内容脚本(或内容脚本文件;在本例中为check-node.js):

self.on("click",function(node,data){
    self.postMessage("click");
});
self.on("context", function(node){
    if(node.href && node.href.match(/^https?:\/\/(\w+\.)*stackoverflow\.com(\/.*)?$/))return true;  //show in context menu if return value is true.
});

回复:您的示例代码。您有 URLContext 来确定您的菜单项显示在哪些页面上,此代码段 self.on("context", function(node) {return true; }); 导致满足 URLContext 条件时始终显示的菜单项。请改用 SelectorContext。并如上所示测试 node.href,仅当您希望显示菜单项时才返回 true。

关于javascript - 使用附加 SDK 在 Firefox 中自定义上下文菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15851835/

相关文章:

javascript - 使用 Jquery 从侧面弹出一个 div。

javascript - 如何遍历 HTML 元素中的所有属性?

javascript - appendChild 不会将节点添加到子级列表的末尾

javascript - 在内容脚本和主附加脚本之间传递 RegExp 对象

firefox-addon - 调试 SDK 插件时如何修改源代码而不重新运行 cfx 和 Firefox?

python - Firefox 附加组件 SDK 入门

javascript - Addon-sdk page-mod 加载了一些奇怪的而不是实际的网页

javascript - 绕过并发 ajax 调用限制的最佳实践

firefox-addon - 在 Firefox 的 browser.js 中调用 toggleSidebar

php - 动态 JavaScript 重定向