加载项生成器:ContentScript并返回到Addon代码?

时间:2012-03-18 08:04:40

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

我正在使用Firefox Add-on Builder,这是我到目前为止所拥有的:

main.js:

var widgets = require("widget");
var tabs = require("tabs");
var data = require("self").data;

var widget = widgets.Widget({
  id: "div-show",
  label: "Show divs",
  contentURL: "http://www.mozilla.org/favicon.ico",
  onClick: function() {
    tabs.activeTab.attach({
      contentScriptFile: [data.url("jquery.js"), data.url("myScript.js")]
    });
  }
});

myScript.js

var first = $(".avatar:first");
var url = first.attr("href");

现在我停留在如何将url变量传递回main.js,以便它可以在新选项卡中打开url。从myScript.js我无法访问main.js中声明的tabs对象。

1 个答案:

答案 0 :(得分:1)

当然! attach方法返回一个可用于设置事件处理程序的worker实例:

// main.js
var widgets = require("widget");
var tabs = require("tabs");
var data = require("self").data;

var widget = widgets.Widget({
  id: "div-show",
  label: "Show divs",
  contentURL: "http://www.mozilla.org/favicon.ico",
  onClick: function() {
    var worker = tabs.activeTab.attach({
        contentScriptFile: [data.url("jquery.js"), data.url("myScript.js")]
    });
    worker.port.on('got-url', function(data) {
        tabs.open(data.url);
    });
  }
});

// myScript.js script:
var first = $(".avatar:first");
var url = first.attr("href");
self.port.emit('got-url', {url: url});

有关详细信息,请参阅attach方法的文档:

https://addons.mozilla.org/en-US/developers/docs/sdk/1.5/packages/addon-kit/docs/tabs.html#attach%28options%29

...以及内容脚本指南:

https://addons.mozilla.org/en-US/developers/docs/sdk/1.5/dev-guide/addon-development/web-content.html

警告:没有运行此代码,但它应该可以工作。