无法在v3.0.5中使用ff扩展

时间:2010-12-22 15:14:30

标签: firefox-addon xul

有没有人知道自v3.0.5以来可能会有什么变化可以使扩展工作?或者,也许我错过了某个地方的设置?我写了这个附加组件,适用于较新的版本,但我不能让它在较旧的版本中启动。具体来说,我甚至无法使这部分工作(这在我的浏览器overlay.xul中):

<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定义)但是,我甚至没有在控制台中收到“初始化...”消息。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

  1. 请勿使用&lt; html:script&gt ;,请使用&lt; script&gt; (假设您的根&lt; overlay&gt;元素上有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本身不支持超过一年的时间,不应该用它来访问网络。

答案 1 :(得分:0)

看起来gBrowser.log未定义,或者至少不是函数,因为错误控制台可能会告诉您。我也没听说过。也许它是在Fx 3.5中添加的?