相关疑难解决方法(0)

与Firefox附加脚本和内容脚本的并发性

当我使用Add-on SDK编写Firefox附加组件时,我注意到附加代码和内容脚本代码阻止了彼此的执行.此外,附加代码似乎甚至阻止了与其他Firefox窗口(不仅仅是标签)的交互.

Firefox附加组件的并发/进程模型是什么?

是否可以在没有合作多线程(la定时器)的情况下同时运行附加代码和内容脚本代码?

加载了多少次加载代码?每个窗口一次?每个标签一次?一旦?

文件规定:

Mozilla平台正朝着一个模型发展,在该模型中,它使用单独的流程来显示UI,处理Web内容和执行附加组件.主要附加代码将在附加组件进程中运行,并且不能直接访问任何Web内容.

所以我希望将来它们确实是不会相互干扰的独立过程,但现在似乎并非如此.


更新:

我已尝试使用附加代码中的页面工作程序,但不幸的是,它仍会阻止内容脚本(以及所有其他javascript).我也尝试在页面工作者中使用Web worker,但是在调用web worker的postMessage函数时出现以下错误.

TypeError:worker.postMessage不是函数

我还尝试在page-worker中创建iframe,然后在iframe中创建一个web worker,但遗憾的是我不能使用page-worker中的window.addEventListener.我收到以下错误:

TypeError:window.addEventMessage不是函数

最后,我尝试将脚本(通过脚本元素)注入页面工作者页面,以创建一个似乎有用的Web工作者.不幸的是,我无法与此Web工作者通信,因为我只能通过document.defaultView.postMessage向其发送消息.

哦,我编织的缠结的网...

content-script - > add-on - > page-worker - > iframe - > web worker - >我的代码


我举了一个简单的例子:

的package.json

{
    "name": "test", 
    "author": "me", 
    "version": "0.1", 
    "fullName": "My Test Extension", 
    "homepage": "http://example.com", 
    "id": "jid1-FmgBxScAABzB2g", 
    "description": "My test extension"
}
Run Code Online (Sandbox Code Playgroud)

LIB/main.js

var data = require("self").data;
var pageMod = require("page-mod");

pageMod.PageMod({
    include: ["http://*", "https://*"],
    contentScriptWhen: "start",
    contentScriptFile: [data.url("content.js")],
    onAttach: function (worker) …
Run Code Online (Sandbox Code Playgroud)

firefox-addon firefox-addon-sdk

3
推荐指数
1
解决办法
3237
查看次数

标签 统计

firefox-addon ×1

firefox-addon-sdk ×1