2010-12-22 33 views
2

有誰知道自v3.0.5以來可能發生了什麼變化,可以使擴展工作?或者,也許我錯過了某個地方的設置?我編寫了這個附加程序,它適用於較新的版本,但我無法在較舊的版本中啓動它。具體來說,我甚至無法獲得這部分工作(這是我的瀏覽器overlay.xul):無法獲得ff擴展在v3.0.5中工作

<html:script> 
<![CDATA[ 

    var Cc = Components.classes; 
    var Ci = Components.interfaces; 
    var obSvc = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService); 

    gBrowser.consoleService = Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService); 
    gBrowser.log = function(msg){ 
     this.consoleService.logStringMessage(msg); 
    } 

    gBrowser.newObj= new MyAddOn(); 
    gBrowser.log("initializing..."); 
    function regListener() 
    { 
     obSvc.addObserver(gBrowser.newObj, "http-on-modify-request", false); 
    } 
    function unregListener() 
    { 
     obSvc.removeObserver(gBrowser.newObj, "http-on-modify-request"); 
    } 

    window.addEventListener("load", regListener, false); 
    window.addEventListener("unload", unregListener, false); 

]]> 

應該附加偵聽到新的OBJ(通過鏈接的定義。 js)但是,我甚至沒有在控制檯中看到「初始化...」消息。有任何想法嗎?

+1

錯誤控制檯中的任何輸出? ctrl-shift-J – MatrixFrog 2010-12-23 03:02:17

+1

如果我在about:config中沒有記錯,那麼必須將javascript.options.showInConsole屬性設置爲true才能看到控制檯中的錯誤,這可能是錯誤的。無論如何,如果它不幫助做到以下幾點:把警報('一些消息');在每行之後(明顯改變每次發生的消息)和運行瀏覽器時得到的最後一條消息是錯誤出現的位置(在代碼後面)。我知道它不是那麼複雜,但對於像這樣的小代碼,它是最快的調試技術 – Mihailo 2010-12-23 10:30:12

回答

0

看起來像gBrowser.log沒有定義,或者至少不是一個函數,因爲錯誤控制檯可能會告訴你。我從來沒有聽說過它。也許它是在Fx 3.5中添加的?

+0

不,你只是錯過了它:我定義gBrowser.log作爲this.consoleService.logStringMessage(msg) – 2010-12-22 23:31:43

1
  1. 不要使用< HTML:SCRIPT>,使用< SCRIPT>(假設你的xmlns = 「http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul」 上你的根<覆蓋>元素)。
  2. 請勿從窗口疊加層註冊應用程序全局偵聽程序(http-on-modify-request)。這樣做會使您的代碼在用戶可能打開的每個窗口中運行一次。改爲使用XPCOM組件 - https://developer.mozilla.org/en/Setting_HTTP_request_headers
  3. 請勿使用自己的屬性污染常用對象(如gBrowser或全局對象(帶有var Cc))。如果每個人都這樣做,沒有兩個擴展可以一起工作。把你所有的代碼屬性放在你自己的對象上,並使用唯一的名字。
    • 訪問gBrowser加載事件之前可能是什麼導致您的具體問題。
  4. Set up your environment並檢查錯誤控制檯以調試問題。
  5. 不要浪費時間嘗試支持Firefox 3.它不被Mozilla自己支持一年多,不應該用於訪問網絡。