从Firefox Add-on SDK的上下文菜单中打开一个新选项卡

时间:2015-11-08 03:42:08

标签: javascript firefox firefox-addon firefox-addon-sdk

在阅读these两个sites后,我无法从上下文菜单中获取一段JS代码。

index.js:

var self = require('sdk/self');
var contextMenu = require("sdk/context-menu");
var uri = "";
var script = 'self.on("click", function (node, data) {' +
                'var uri = "http://test.net/?blee=" + node.href + "blue=true";' +
                'console.log(uri);'+
                'tabs.open(uri);'+
                '});';
var tabs = require('sdk/tabs');
var menuItem = contextMenu.Item({
    label: "label",
    context: contextMenu.SelectorContext("a[href]"),
    contentScript: script,
    onMessage: function (data) {
        console.log(data);
    }
});`

整个扩展程序就在那里,奇怪的是它将var uri输出到控制台,但它在tabs.open(uri)失败了。 tabs.open应该在函数内部而不是这个笨拙的脚本吗?

我试图为firefox编写我的chrome扩展程序来完成同样的事情。这是Chrome扩展程序

中的代码

main.js:

  runFunction= function(word){
  var query = word.linkUrl;
  chrome.tabs.create({url: "http://test.net/?blee=" + query + "&blue=True"});
   };

chrome.contextMenus.create({
  title: "Title!",
  contexts:["link"],
  onclick: runFunction
});

1 个答案:

答案 0 :(得分:3)

在contextMenu脚本中,self.postMessage uri

然后打开menuItem onMessage函数

中的选项卡
var self = require('sdk/self');
var contextMenu = require("sdk/context-menu");
var uri = "";
var script = 'self.on("click", function (node, data) {' +
                'var uri = "http://test.net/?blee=" + node.href + "blue=true";' +
                'console.log(uri);'+
                'self.postMessage(uri);'+
                '});';
var tabs = require('sdk/tabs');
var menuItem = contextMenu.Item({
    label: "label",
    context: contextMenu.SelectorContext("a[href]"),
    contentScript: script,
    onMessage: function (data) {
        tabs.open(data);
    }
});

如果上下文菜单的脚本变得很麻烦,请将其放在扩展程序的data文件夹中的文件中 - 它必须是data文件夹

例如,如果它的名称为data/contextScript.js,则代替

contentScript: script,

使用

contentScriptFile: './contextScript.js',

请注意路径

中{strong>缺少 data

那句法,

contentScriptFile: './filename.js'

的快捷方式
contentScriptFile: self.data.url("filename.js")

早期版本的jpm SDK

的语法是什么