【问题标题】:Add-on Builder: ContentScript and back to Addon code?附加组件生成器:ContentScript 并返回附加组件代码?
【发布时间】:2012-03-18 08:04:40
【问题描述】:

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

ma​​in.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 中声明的标签对象。

【问题讨论】:

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


    【解决方案1】:

    当然! 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

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

    【讨论】:

    • 当然:var workers = []; for each (var tab in windows.activeWindow.tabs) { workers.push(tab.attach({contentScriptFile: [data.url("jquery.js"), data.url("myScript.js")]})); } 当我有一个名为 workers 的工人数组而不是 worker 时,我该怎么做?
    • 我想我在这里回答了这个问题:stackoverflow.com/questions/9765671/…
    猜你喜欢
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 2010-09-07
    相关资源
    最近更新 更多