2013-03-29 5 views
0

Я работаю над надстройкой Firefox, а вместе с ним мне нужно следить за содержимым конкретного сайта и реагировать на изменения DOM. В настоящее время я использую комбинацию gBrowser.contentDocument.getElementsByClassName("class") и прилагаю к ней DOMSubteeeModified. Но я замечаю, что он работает только при активной вкладке. Когда я уйду с другой вкладкой, а изменения DOM на неактивной вкладке, это не сработает. Как мне обойти это? Firefox MDN довольно разбросан (и иногда устарел), это очень неприятно для новичка.Получить содержимое определенной вкладки (разработка надстройки Firefox)

Вот упрощенная версия того, что я делаю:

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); 

ответ

0

Вот метод я следую, используя gBrowser.selectedBrowser, как документально here

var MyExtension = { 
    tab : null, //<---- added this line 
    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)) { 
      this.tab = gBrowser.selectedBrowser; //<--- GET REFERENCE TO CURRENT TAB 
      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 
     MyExtension.tab.contentDocument.getElementsByClassName("class"); //<--- GET CONTENT DOCUMENT INSIDE DESIRED TAB 
     //bind DOMSubtreeModified listener, attach a function to handle the event 
    } 
}; 
Смежные вопросы