Firefox, Tabopen Event 및 Beyond에서 탭 재사용
-
13-09-2019 - |
문제
Firefox 내부의 재사용 탭에 대한 튜토리얼을 따랐으며 지금은 내 확장 기능이 잘 작동합니다. 그러나 외부에서 열린 탭을 재사용해야합니다 (일부 응용 프로그램, 시작 메뉴 등). 어떻게해야합니까?
Tabopen 이벤트를 위해 이벤트 리스너를 추가하려고했지만 로그인 할 때
event.target.linkedBrowser.currentURI.spec
가치는 "about : blank"입니다. 주소 표시 줄에 입력 한 실제 주소 (새 탭에서 자동으로 열림) 또는 다른 응용 프로그램에서 열리는 주소를 예상 했으므로 해당 탭을 즉시 닫고 올바른 초점을 맞출 수 있습니다. 내가 뭘 잘못하고 있죠?
미리 감사드립니다.
만일 경우, 새 탭이 확장자에서 요청 될 때 탭을 재사용하는 코드가 있습니다.
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 이벤트를 받으면로드 또는 DomContentLoaded에 등록해야합니다. 해당 이벤트를 받으면 URI에 액세스 할 수 있어야합니다.
다른 팁
구현에서 원하는 동작을 추출 할 수 있다고 생각합니다. 탭 믹스 플러스 확대
제휴하지 않습니다 StackOverflow