【发布时间】:2014-09-09 08:51:57
【问题描述】:
我有 firefox 插件,它会向所有页面注入两个内容脚本。
var workers = [];
pageMod.PageMod({
include: "*",
contentScriptFile: [
self.data.url("content/autofill/lib_generic.js"),
self.data.url("content/autofill/lib.js"),
],
// add worker to the list
onAttach: function(worker)
{
workers.push(worker);
var filename = getDomainSpecificFilename(worker.contentURL);
worker.on("detach", function()
{
var index = workers.indexOf(worker);
if (index >= 0)
workers.splice(index, 1);
});
}
});
lib_generic.js 包含一个名为apply_forms(...) 的函数(其描述并不重要)。该函数从lib.js 文件中调用。但此过程不适用于多个页面,因此对于每个这样的页面,我都有一个特定的脚本 - 这些文件也只包含一个名为 apply_forms(...) 的函数。
我有一个函数,它将当前域作为输入并返回所需特定脚本的名称或 false 如果应该使用泛型。
我需要的是 - 在必要时 - 用特定的 apply_forms 重新定义通用 apply_forms。
我试过了
tabs.activeTab.attach({
contentScriptFile: [ filename ]
});
worker.port.emit("apply_forms_loaded");
在内容脚本之一中:
var apply_forms_loaded = false;
self.port.on("apply_forms_loaded", function() {
console.log("LOADED");
apply_forms_loaded = true;
});
整个过程是这样开始的:
var timer;
timer = setInterval(function(){
if (apply_forms_loaded) {
clearInterval(timer);
start(); // apply_forms is called somewhere inside this call
}
}, 10);
不幸的是,tabs.activeTab.attach 似乎在不同的上下文中注入了内容脚本,因此总是调用通用函数。
我可以做些什么来说服activeTab 在相同的上下文中添加内容脚本,还是应该以不同的方式来做? (那是哪一个)
或者问题可能出在 - 我不知道 - 当我发送 apply_forms_loaded 消息时内容脚本没有完全注入?
我一直在尝试为 Chrome 重新定义函数定义,并且我已经成功了 (url to SO question)
感谢您的建议。
【问题讨论】:
标签: javascript firefox firefox-addon firefox-addon-sdk content-script