通过自定义firefox菜单项获取链接的源url

通过自定义firefox菜单项获取链接的源url,firefox,firefox-addon,contextmenu,menuitem,firefox-addon-sdk,Firefox,Firefox Addon,Contextmenu,Menuitem,Firefox Addon Sdk,我曾尝试: 将菜单项添加到mozilla firefox菜单 仅当用户单击链接时,它才会出现 如果用户单击菜单项,控制台中将丢失源url 这是我的代码,根本无法显示菜单项: var contextMenu = require("sdk/context-menu"); var menuItem = contextMenu.Item({ label : "Show the url",

我曾尝试:

  • 将菜单项添加到mozilla firefox菜单
  • 仅当用户单击链接时,它才会出现
  • 如果用户单击菜单项,控制台中将丢失源url
这是我的代码,根本无法显示菜单项:

 var contextMenu = require("sdk/context-menu");
 var menuItem = contextMenu.Item({
                              label         : "Show the url",
                              context       : contextMenu.SelectorContext("a[href]"), 
                              contentScript : 'self.on("click", function (node , data) {' + '  self.postMessage(node.src);' +'});',
                              onMessage: function (url) { console.log(url);}
                             });
我有以下日志:

console.log:rd加载项:null


您刚才试过[href]吗?如果没有,则在contentScript中将其更改为:


contentScript:'self.on('click',函数(节点,数据){if(node.nodeName!=“A”){return false}'+'self.postMessage(node.src);'+'});',


试试看,如果不行,告诉我。我更喜欢的解决方案是非sdk,我可以与您分享,然后

您是否尝试过[href]?如果没有,则在contentScript中将其更改为:


contentScript:'self.on('click',函数(节点,数据){if(node.nodeName!=“A”){return false}'+'self.postMessage(node.src);'+'});',

试试看,如果不行,告诉我。我喜欢的解决方案是非sdk,我可以与您分享,然后更改:

context       : contextMenu.SelectorContext("a[href]"), 

更改:

context       : contextMenu.SelectorContext("a[href]"), 

对我有好处:

context: [cm.URLContext("*"), cm.SelectorContext("a[href], img")],
contentScript: 'self.on("click", function (node, data) {' +
    '  self.postMessage(node.href||node.src);' +
    '});',
对我有好处:

context: [cm.URLContext("*"), cm.SelectorContext("a[href], img")],
contentScript: 'self.on("click", function (node, data) {' +
    '  self.postMessage(node.href||node.src);' +
    '});',

你有没有试过[href]?你有没有试过[href]?相同的:“console.log:rd addon:null”相同的:“console.log:rd addon:null”对不起,“console.log:rd addon:null”。哇,这太疯狂了,好吧,我会考虑一下,稍后再发。谢谢你的技巧,它现在起作用了:>>>context:contextMenu.URLContext(“*”,contentScript:'self.on(“单击”,函数(节点,数据){'+'self.postMessage(node.href,数据);'+'});',------(node.href)而不是(node.src)。我的道歉可能听起来太刺耳了。尽力帮助是好的,但不是不惜一切代价。如果一个“解决方案”修补了不相关的东西,但没有解决问题(但确实引入了不需要的特性),老实说,它没有多大用处。在声明它有效之前进行测试有助于避免这种情况。问题是,
URLContext
引用文档的URL,
*
匹配除本地文件之外的所有内容,因此除了不能解决问题外,这还显示了不应该显示的菜单项(即,当不单击链接时)。有关有效的解决方案,请参见@tortway提供的答案。抱歉,“console.log:rd addon:null”。哇,这太疯狂了。好的,我会考虑一下,稍后再发布。谢谢这个技巧,它现在可以工作了:>>>>context:contextMenu.URLContext(*”),contentScript:'self.on(“单击”),函数(节点,数据){'+'self.postMessage(node.href,data);“+”};”,------(node.href)而不是(node.src)。我可能听起来太严厉了,我向您道歉。尝试帮助是好的,但不是不惜一切代价。如果“解决方案”修补了不相关的东西,并且没有解决问题(但确实引入了不需要的功能),老实说,它没有多大用处。在声明它有效之前进行测试有助于避免这种情况。问题是,
URLContext
引用文档的URL,
*
匹配除本地文件之外的所有内容,因此除了不能解决问题外,这还显示了不应该出现的菜单项(即,当不点击链接时)。有关有效的解决方案,请参阅@tortway.Excellent的答案。这是所有答案中的一个(包括已接受的答案)唯一一个真正解决了这个问题,也是唯一一个真正起作用的。问题确实是
节点
可能定义了
href
也可能没有定义
src
(顺便说一句,这两个节点都没有正确的文档记录),代码
node.href | | node.src
优雅地捕捉到了这两种情况。非常感谢@tortway分享了一个准确的解决方案!:)请投票否决我接受的解决方案,因此此解决方案位于顶部:)非常好。这是所有答案(包括公认的答案)中唯一一个真正解决问题的答案,也是唯一一个真正有效的答案。问题确实是,
node
可能定义了
href
也可能没有定义
src
(顺便说一句,这两种定义都没有正确的文档记录),而code
node.href | | node.src
优雅地抓住了这两种情况。非常感谢@tortway分享一个准确的解决方案!)请投票否决我接受的解决方案,因此此方案位于顶部:)