나는 모든 페이지에 두 개의 콘텐트 스크립트를 주입하는 firefox addon을 가지고 있습니다.firefox sdk : 콘텐트 스크립트 기능을 다시 정의하십시오.
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(...)
이라는 함수 하나만 포함되어 있습니다.
나는 현재 도메인을 입력으로 사용하고 원하는 특정 스크립트의 이름을 반환하거나 generic을 사용해야하는 경우 false
을 반환하는 함수가 있습니다.
내가 필요한 것은 - 필요한 경우 - 다시 정의 일반 apply_forms
apply_forms
과 함께합니다.
나는
tabs.activeTab.attach({
contentScriptFile: [ filename ]
});
worker.port.emit("apply_forms_loaded");
을 사용하는 시도하고 콘텐츠 스크립트 중 하나에 :
VAR는 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
그래서 일반적인 기능에 allways라고 다른 맥락에서 내용 스크립트를 주입 것으로 보인다.
activeTab
에 동일한 내용으로 콘텐츠 스크립트를 추가하도록 설득 할 수있는 방법이 있습니까? 아니면 다른 방식으로해야합니까? (그 중 하나)
또는 문제가 될 수 있습니다 - 나는 콘텐츠 스크립트가 완전히 주입되지 않았을 때 apply_forms_loaded
메시지를 보냈습니까?
나는 크롬 또한 함수 정의를 재정의하려고 봤는데 나는 조언 (url to SO question)
감사를 작동했습니다.