首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Add-on Builder:多个工人使用端口?

Add-on Builder:多个工人使用端口?
EN

Stack Overflow用户
提问于 2012-03-19 14:00:58
回答 1查看 511关注 0票数 2

关于这个问题:Add-on Builder: ContentScript and back to Addon code?

下面是我的插件代码:

代码语言:javascript
复制
var widget = widgets.Widget({
  id: "addon",
  contentURL: data.url("icon.png"),
  onClick: function() {
    var workers = [];
    for each (var tab in windows.activeWindow.tabs) {
        var worker = tab.attach({contentScriptFile: [data.url("jquery.js"), data.url("myScript.js")]});
        workers.push(worker);
    }
  }
});

下面是myScript.js:

代码语言:javascript
复制
var first = $(".avatar:first");
if (first.length !== 0) {
    var url = first.attr("href");
    self.port.emit('got-url', {url: url});
}

现在我有了多个工作人员,我应该把

代码语言:javascript
复制
worker.port.on('got-url', function(data) {
            worker.tab.url = data.url;
        });

因为在另一个问题中,我只有一个工人,但现在我有一组工人。

EN

回答 1

Stack Overflow用户

发布于 2012-03-20 06:38:30

代码为:

代码语言:javascript
复制
// main.js:
var data = require("self").data;
var windows = require("windows").browserWindows;

var widget = require("widget").Widget({
    id: "addon",
    label: "Some label",
    contentURL: data.url("favicon.png"),
    onClick: function() {
        //var workers = [];
        for each (var tab in windows.activeWindow.tabs) {

            var worker = tab.attach({
                contentScriptFile: [data.url("jquery.js"), 
                data.url("inject.js")]
            });

            worker.port.on('got-url', function(data) {
                console.log(data.url);
                // worker.tab.url = data.url;
            });

            worker.port.emit('init', true);
            console.log("got here");
            //workers.push(worker);
        }
    }
});

// inject.js
$(function() {
    self.port.on('init', function() {
        console.log('in init');
        var first = $(".avatar:first");
        if (first.length !== 0) {
            var url = first.attr("href");
            console.log('injected!');
            self.port.emit('got-url', {url: url});
        }    
    });
});

编辑:对不起,实际上应该已经运行了代码,我们有一个计时问题,内容脚本是在worker侦听器设置之前注入的,所以当‘got url’事件发出时,侦听器还没有被创建。我通过推迟内容脚本中的任何操作来解决这个问题,直到'init‘事件被发送到内容脚本中。

这是一个关于builder的工作示例:

https://builder.addons.mozilla.org/addon/1045470/latest/

这个例子剩下的问题是,没有办法知道我们的附加组件是否注入了选项卡,所以每次单击小部件时,我们都会“泄漏”或使用更多内存。一种更好的方法可能是在加载时使用page-mod注入内容脚本,并且只在小部件的onclick处理程序中发出'init‘事件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9765671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档