每当为我的bootstrap扩展加载新的Firefox窗口时,我想添加一个标签。我使用此代码清单:
var WindowListener = {
setupBrowserUI: function(window) {
window.gBrowser.selectedTab=window.gBrowser.addTab("http://google.com");
},
tearDownBrowserUI: function(window) {
},
// nsIWindowMediatorListener functions
onOpenWindow: function(xulWindow) {
var domWindow = xulWindow.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIDOMWindow);
// Wait for it to finish loading
domWindow.addEventListener("load", function listener() {
domWindow.removeEventListener("load", listener, false);
// If this is a browser window then setup its UI
if (domWindow.document.documentElement.getAttribute("windowtype")=="navigator:browser") domWindow.gBrowser.selectedTab=domWindow.gBrowser.addTab("http://google.com");
}, false);
},
onCloseWindow: function(xulWindow) {
},
onWindowTitleChange: function(xulWindow, newTitle) {
}
};
let wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].
getService(Components.interfaces.nsIWindowMediator);
// Wait for any new browser windows to open
wm.addListener(WindowListener);
您可以在Scratchpad中尝试。
onOpenWindow方法具有在新窗口中打开选项卡的代码,但它在窗口完全加载之前执行,因此在此状态下添加选项卡似乎不起作用,尽管MDN代码显示“等待它完成加载”。
通过setTimeout函数设置超时可以完成工作,但看起来很难看。
domWindow.setTimeout(function(){domWindow.gBrowser.selectedTab=domWindow.gBrowser.addTab("http://google.com");},1000);
是否可以在没有setTimeouts的情况下加载窗口后为新的Firefox窗口添加选项卡?
答案 0 :(得分:0)
我选择了setTimeout(..., 0)
黑客。这应该是最可靠的选项,并在整个Firefox代码中使用:p
if (domWindow.gBrowser) {
setTimeout(function() {
domWindow.gBrowser.selectedTab =
domWindow.gBrowser.addTab("http://google.com");
}, 0);
}
答案 1 :(得分:0)
真的很奇怪。我无法解释。但从行:
if(domWindow.document.documentElement.getAttribute(" windowtype")==" navigator:browser")domWindow.gBrowser.selectedTab = domWindow.gBrowser.addTab(&#34 ; http://google.com&#34);
删除domWindow.gBrowser.selectedTab =
,然后将其更改为:
if (domWindow.document.documentElement.getAttribute("windowtype")=="navigator:browser") {
domWindow.gBrowser.addTab("http://google.com");
}
这成功加载了网址,但它没有选择标签我试过,绝对新的想法为什么这个东西失败了:
if (domWindow.document.documentElement.getAttribute("windowtype")=="navigator:browser") {
var tab = domWindow.gBrowser.addTab("http://google.com");
}
一旦我将var tab =
放在前面就失败了。如果它没有失败,我打算下一行:domWindow.gBrowser.selectedTab = tab
然后这也失败了:
loadOneTab
有inBackground
参数,如果设置为false,则会关注标签:
if (domWindow.document.documentElement.getAttribute("windowtype")=="navigator:browser") {
domWindow.gBrowser.loadOneTab("http://google.com", {inBackground:false});
}
绝对不知道,但是这无法加载网址,但它会关注标签。如果您将inBackground
设置为true
,则会加载网址,当然它不会关注标签。绝对奇怪......
发布以便其他人可以找出问题所在,也许我们需要报告bugzilla的内容。