我正在编写一个无重启的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。:如果某人有更好的标题,请随时编辑。
答案 0 :(得分:1)
使用winMediator.getEnumerator(null)
会为您提供所有类型的窗口,可能是也可能不是浏览器窗口。您应该尝试更改以下行
var mrw = winMediator.getEnumerator(null);
与
var mrw = winMediator.getEnumerator('navigator:browser');
答案 1 :(得分:-1)
我终于发现有时会发生这种行为。 我只是稍微重新排列了代码,删除了for循环中的一些警报,它再次正常工作。 因此,如果有人也有此错误,只需重新安排您的代码,它应该再次像魅力一样。