Domanda

Ho seguito un tutorial su riutilizzo schede all'interno di Firefox, e in questo momento la mia estensione lo fa bene. Tuttavia, ho anche bisogno di riutilizzare le schede che si aprono dall'esterno (da alcune applicazioni, Start Menu, ecc). Come posso fare questo?

Ho provato ad aggiungere un listener di eventi per l'evento TabOpen, ma quando accedo il

event.target.linkedBrowser.currentURI.spec

il suo valore è "about: blank". Mi aspettavo l'indirizzo reale che ho digitato nella barra degli indirizzi (si apre automaticamente in una nuova scheda), oppure l'indirizzo che ho aperto da qualche altra applicazione, in modo da poter chiudere quella scheda immediatamente, e la messa a fuoco quella giusta. Che cosa sto facendo di sbagliato?

Grazie in anticipo.


Nel caso in cui, ecco il codice che riutilizza la scheda quando una nuova scheda viene richiesta da un interno

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);
    }
  }
}
È stato utile?

Soluzione

Quando si riceve l'evento TabOpen, è troppo presto per il contenuto della pagina da caricare ancora. Quando si riceve l'evento TabOpen, tuttavia, è necessario registrarsi per il carico o DOMContentLoaded. Quando si riceve questo caso, si dovrebbe essere in grado di accedere alla URI.

Altri suggerimenti

Credo che si potrebbe estrarre il comportamento desiderato dalla realizzazione nel Tab Mix Plus estensione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top