2011-06-24 55 views
0

我正在嘗試編寫firefox擴展,它將在加載(特定)頁面時運行(它將使用相同的關鍵字替換)。Firefox擴展:在頁面加載時運行

我寫的代碼,如:

window.addEventListener("load", function() maApp.init(); }, false); 
var maApp= { 

    init: function() { 
    var appcontent = document.getElementById("appcontent"); // browser 
    if(appcontent) 
     appcontent.addEventListener("DOMContentLoaded", maApp.onPageLoad, true); 
    var messagepane = document.getElementById("messagepane"); // mail 
    if(messagepane) 
     messagepane.addEventListener("load", function(event) { maApp.onPageLoad(event); }, true); 
    }, 
    onPageLoad: function() { 
      alert("test); 
     doSomething(); 
    }      
}; 

不過是的onPageLoad從未運行......毫無戒備......有人可以告訴我什麼,我做錯了什麼?

+1

您在第一行錯過了梅開二度... – YeJiabin

+0

或者乾脆直接傳遞給函數:maApp.init –

+0

什麼是如此,一個上下文火狐/雷鳥覆蓋? Thunderbird具有'',但在Firefox中'appcontent'不是瀏覽器,而是它的容器。來自內容框架的事件不會冒泡,因此您必須直接將偵聽器附加到瀏覽器('document.getElementById(「content」)')。 –

回答

4

首先得到瀏覽器元素的一些詞。在Firefox中,此元素ID爲content,而不是appcontent。不過,推薦的方法是window.gBrowser變量。在Thunderbird 5中,瀏覽器元素的ID發生了變化,所以您的代碼將停止工作 - 而不是通過ID來使用,您應該使用window.messageContent變量,該變量可以在當前版本和未來版本中使用。您相聚:

var browser = null; 
if ("gBrowser" in window) 
    browser = window.gBrowser;    // Firefox and SeaMonkey Browser 
else if ("messageContent" in window) 
    browser = window.messageContent;  // Thunderbird 
else if ("getMessageBrowser" in window) 
    browser = window.getMessageBrowser(); // SeaMonkey Mail 

if (browser) 
    ... 

現在關於聽頁面加載,這裏推薦的方法是進步的聽衆 - 見https://developer.mozilla.org/en/Code_snippets/Progress_Listeners。您將一個過程偵聽到瀏覽器,尋找狀態變化:

onStateChange: function(aWebProgress, aRequest, aFlag, aStatus) 
{ 
    if ((aFlag & Components.interfaces.nsIWebProgressListener.STATE_STOP) && 
     (aFlag & Components.interfaces.nsIWebProgressListener.STATE_IS_WINDOW)) 
    { 
    // A window finished loading 
    doSomething(aWebProgress.DOMWindow); 
    } 
} 
+0

所以在我的var maApp = {}我應該添加onStateChange? – PsychoX

+0

不,你應該閱讀我給你的鏈接。您可以將maApp轉換爲進度監聽器,或者您可以創建單獨的進度監聽器對象,這並不重要。但是一個進度監聽器需要擁有所有的方法('onSecurityChange','onProgressChange'等),即使你不使用它們。 –

+0

謝謝。運行得到:) – PsychoX

相關問題