我正在编写一个无需重新启动的 Firefox 扩展,我必须枚举所有打开的选项卡并使用它们。
这是引发错误的代码部分:
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 is undefined
...指向该行:
var t = win.gBrowser.browsers.length;
但在抛出错误之前,我收到了警报消息,它为我提供了正确的选项卡数量。因此,错误是在该行执行后抛出的,而不是在执行时直接抛出的。 有谁知道如何解决这个问题,因为扩展在抛出错误后停止工作。
问候
附注:如果有人有更好的标题,请随意编辑。
最佳答案
使用winMediator.getEnumerator(null)
将为您提供所有类型的窗口,可能是也可能不是浏览器窗口。您应该尝试更改以下行
var mrw = winMediator.getEnumerator(null);
与
var mrw = winMediator.getEnumerator('navigator:browser');
关于javascript - .gBrowser 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19789071/