2010-12-22 42 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自己支持一年多,不应该用于访问网络。