Firefox/Chrome 插件 socketio
Firefox/Chrome addon socketio
我正在尝试将 chrome 扩展移植到 Firefox。我的 Chrome 扩展使用背景页面在插件启动时初始化一个 socketio 连接。然后在内容页面中,我将事件发送到后台页面以通过 socketio 发出事件。所以我有 1 个连接,它被许多选项卡使用。
有没有可能在 FF 中创建这样的东西?是否可以为插件创建一个共享工作人员并通过选项卡与工作人员进行通信?有什么建议么?
提前致谢。
您可以使用 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。
我正在尝试将 chrome 扩展移植到 Firefox。我的 Chrome 扩展使用背景页面在插件启动时初始化一个 socketio 连接。然后在内容页面中,我将事件发送到后台页面以通过 socketio 发出事件。所以我有 1 个连接,它被许多选项卡使用。
有没有可能在 FF 中创建这样的东西?是否可以为插件创建一个共享工作人员并通过选项卡与工作人员进行通信?有什么建议么? 提前致谢。
您可以使用 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。