私は Firefox アドオンに取り組んでおり、特定のサイトのコンテンツを監視し、DOM の変更に対応する必要があります。現在、私はイベントを組み合わせて使用しgBrowser.contentDocument.getElementsByClassName("class")
てDOMSubteeeModified
います。しかし、タブがアクティブな場合にのみ機能することに気付きました。別のタブを使用して離れていて、非アクティブなタブで DOM が変更された場合、それは機能しません。どうすればこれを回避できますか? Firefox の MDN はかなり散らばっており (時代遅れの場合もあります)、初心者にとっては非常にイライラさせられます。
これが私がやっていることの簡略化されたバージョンです:
var MyExtension = {
init() : function() {
if("gBrowser" in window) {
gBrowser.addEventListener("DOMContentLoaded", function(e){this.onPageLoad(e);},false);
},
onPageLoad: function(e) {
var doc = e.originalTarget;
if((/http://xxxx.xyz/v/[0-9a-z]/).test(doc.location.href)) {
MyExtension.XXX.handler(e);
}
e.originalTarget.defaultView.addEventListener("unload", function(e){MyExtension.onUnload(e);}, false);
},
onUnload: function(e) {
if((/http://xxxx.xyz/v/[0-9a-z]/).test(e.originalTarget.location.href)) {
//remove listeners and nullify references to dom objects
}
};
MyExtension.XXX = {
handler : function(e) {
//get dom element with gBrowser.contentDocument.getElementsByClassName("class");
//bind DOMSubtreeModified listener, attach a function to handle the event
}
};
window.addEventListener("load", function(e) {
window.removeEventListener("load", load, false);
MyExtension.init();
}, false);