.gBrowser未定义

时间:2013-11-05 12:30:10

标签: javascript firefox firefox-addon firefox-addon-restartless

我正在编写一个无重启的Firefoxextension,我必须枚举所有打开的选项卡并使用它们。

这是抛出错误的代码部分:

getInfoString : function ()
    {
        infos = "";
        HELPER.alerting("url", "URL-Function");
        var winMediator = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator);
        HELPER.alerting("url", "Mediator initialized");
        var mrw = winMediator.getEnumerator(null);
        while(mrw.hasMoreElements())
        {
            var win = mrw.getNext();
            var t = win.gBrowser.browsers.length;
            HELPER.alerting("url", "browsers: " + t);
            for (var i = 0; i < t; i++)
            {
                var b = win.gBrowser.getBrowserAtIndex(i);
                if(b.currentURI.spec.substr(0,3) != "http")
                {
                    continue;
                }
                HELPER.alerting(b.title,b.currentURI.spec);
                var doc = b.contentDocument;
                var src = doc.documentElement.innerHTML;
                infos = infos + src
                HELPER.alerting("doc", src);
            }
        }

        return infos;
    }

我在测试时运行JavascriptDebugger-Addon并且Firefox执行一切正常的行

HELPER.alerting("url", "browsers: " + t);

但是在这一行之后,调试器插件会抛出一个错误,说:

  

win.gBrowser未定义

......指着这一行:

var t = win.gBrowser.browsers.length;

但是在它抛出错误之前我得到了我的alertmessage,它给了我正确数量的标签。因此,在执行该行之后抛出错误,而不是直接执行该错误。 有没有人知道如何解决这个问题,因为在抛出错误后扩展程序停止工作。

格尔茨

P.S。:如果某人有更好的标题,请随时编辑。

2 个答案:

答案 0 :(得分:1)

使用winMediator.getEnumerator(null)会为您提供所有类型的窗口,可能是也可能不是浏览器窗口。您应该尝试更改以下行

var mrw = winMediator.getEnumerator(null);

var mrw = winMediator.getEnumerator('navigator:browser');

答案 1 :(得分:-1)

我终于发现有时会发生这种行为。 我只是稍微重新排列了代码,删除了for循环中的一些警报,它再次正常工作。 因此,如果有人也有此错误,只需重新安排您的代码,它应该再次像魅力一样。