2013-04-06 47 views
3

我希望在firefox上下文菜单中添加一个菜单项,该菜单仅在用户右键单击特定url时才会显示 。我有一个函数来测试网址。 我用来做这个通过订阅“popupshowing”事件:使用附加SDK的Firefox中的自定义上下文菜单?

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

现在我试图使用Add-on 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。

回答

4

此代码应只显示在链接上右击冲着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。

相关问题