У меня есть firefox addon, который вводит два сценария содержания на все страницы.firefox sdk: redefine content-script function
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
, если используется общий.
Что мне нужно - при необходимости - redefina generic apply_forms
с конкретным apply_forms
.
Я пытался использовать
tabs.activeTab.attach({
contentScriptFile: [ filename ]
});
worker.port.emit("apply_forms_loaded");
и в одном из содержательных сценариев:
вар apply_forms_loaded = ложь;
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)
Спасибо за советы.