2015-04-02 55 views
0

我试图将Chrome扩展移植到Firefox。我的Chrome扩展程序使用后台页面来启动插件启动时的一个插接连接。然后在内容页面中,我将事件发送到背景页面以通过socketio发出事件。所以我有1个连接,它被许多选项卡使用。Firefox/Chrome插件socketio

有没有可能在FF中创建这样的东西?可能是为插件创建一个共享工作者,并从标签与工作人员进行交流?有什么建议么? 在此先感谢。

回答

1

您可以使用SDK的PageWorker api在Firefox中实现类似于背景页面的内容。这里是一个真正简单的例子:

index.js

var data = require("sdk/self").data; 
var page = require("sdk/page-worker"); 
var re = new RegExp("^https://www.google.*"); 

let { ActionButton } = require("sdk/ui/button/action"); 

let button = ActionButton({ 
    id: "my-button-id", 
    label: "Button Label", 
    icon: { 
    "16": "chrome://mozapps/skin/extensions/extensionGeneric.png", 
    "32": "chrome://mozapps/skin/extensions/extensionGeneric.png" 
    }, 
    onClick: function(state) { 
    main(); 
    } 
}); 

var worker; 

function main() { 

    let contentURL = 'https://www.google.ca/'; 
    if (worker) { 
    worker.contentURL = contentURL; 
    } 

    worker = page.Page({ 
    include: re, 
    contentURL: contentURL, 
    contentScriptWhen: "ready", 
    contentScriptFile: data.url('worker.js') 
    }); 

    worker.port.on('fromWorker', (m) => { 
    console.log("got message", m); 
    worker.port.emit('toWorker', true) 
    }); 
} 

worker.js

console.log("worker> attached..."); 
self.port.on('toWorker', function(message) { 
    console.log("worker>", message); 
}); 
self.port.emit("fromWorker", "message from content worker: "+ [document.location, document.title].join(', ')); 

如果你想与加载到网页中的脚本进行交互,你”我们需要通过postMessage,see these docs for more help,通过内容脚本代理进入页面。

+0

我已经找到了这个解决方案,但谢谢你的回答 – croshim 2015-05-02 14:18:44