编程语言
首页 > 编程语言> > javascript-带有附加SDK的Firefox中的自定义上下文菜单?

javascript-带有附加SDK的Firefox中的自定义上下文菜单?

作者:互联网

我希望在显示的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.

标签:firefox-addon-sdk,javascript
来源: https://codeday.me/bug/20191031/1972655.html