Конструктор надстроек: ContentScript и обратно в код надстройки? - PullRequest
3 голосов
/ 18 марта 2012

Я использую построитель дополнений Firefox, и вот что у меня есть:

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, чтобы он мог открыть ссылку в новой вкладке.Из myScript.js у меня нет доступа к объекту tabs, объявленному в main.js.

1 Ответ

1 голос
/ 18 марта 2012

Конечно!Метод attach возвращает рабочий экземпляр, который можно использовать для настройки обработчика событий:

// 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});

Подробнее об этом см. В документации по методу присоединения:

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

Предупреждение: не запускайте этот код, но он должен работать.

...