在Firefox,Tabopen事件以及其他
-
13-09-2019 - |
题
我遵循了一个关于在Firefox内部重复使用标签的教程,现在我的扩展程序做得很好。但是,我还需要重复使用从外部打开的选项卡(从某些应用程序,开始菜单等)。我该怎么做呢?
我尝试添加tabopen事件的事件侦听器,但是当我记录时
event.target.linkedBrowser.currentURI.spec
它的价值是“关于:空白”。我希望我输入的实际地址(自动在新选项卡中打开)或我从其他某些应用程序打开的地址,因此我可以立即关闭该选项卡,而焦点则是正确的。我究竟做错了什么?
提前致谢。
以防万一,这是当从扩展程序请求新选项卡时重用选项卡的代码
function openAndReuseOneTabPerURL(url) {
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator);
var browserEnumerator = wm.getEnumerator("navigator:browser");
// Check each browser instance for our URL
var found = false;
while (!found && browserEnumerator.hasMoreElements()) {
var browserWin = browserEnumerator.getNext();
var tabbrowser = browserWin.getBrowser();
// Check each tab of this browser instance
var numTabs = tabbrowser.browsers.length;
for(var index=0; index<numTabs; index++) {
var currentBrowser = tabbrowser.getBrowserAtIndex(index);
if (url == currentBrowser.currentURI.spec) {
// The URL is already opened. Select this tab.
tabbrowser.selectedTab = tabbrowser.mTabs[index];
// Focus *this* browser-window
browserWin.focus();
found = true;
break;
}
}
}
// Our URL isn't open. Open it now.
if (!found) {
var recentWindow = wm.getMostRecentWindow("navigator:browser");
if (recentWindow) {
// Use an existing browser window
recentWindow.delayedOpenTab(url, null, null, null, null);
}
else {
// No browser windows are open, so open a new one.
window.open(url);
}
}
}
解决方案
当您收到Tabopen事件时,现在还要加载页面内容还为时过早。但是,当您收到Tabopen事件时,应注册负载或Domcontentload。当您收到该活动时,您应该能够访问URI。
其他提示
我想您可以从实施中提取通缉行为 标签混音加上 扩大
不隶属于 StackOverflow