문제

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에 액세스 할 수 있어야합니다.

다른 팁

구현에서 원하는 동작을 추출 할 수 있다고 생각합니다. 탭 믹스 플러스 확대

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top