Question

J'ai suivi un tutoriel sur la réutilisation des onglets dans Firefox, et maintenant mon extension le fait bien. Cependant, je dois aussi réutiliser les onglets qui sont ouverts à l'extérieur (depuis une application, menu de démarrage, etc.). Comment puis-je faire?

J'ai essayé d'ajouter un écouteur d'événement pour l'événement TabOpen, mais quand je me connecte le

event.target.linkedBrowser.currentURI.spec

sa valeur est "about: blank". Je me attendais à l'adresse réelle que je tapés dans la barre d'adresse (ouvre automatiquement dans un nouvel onglet), ou à l'adresse que j'ouvre d'une autre demande, donc je peux fermer cet onglet immédiatement, et la mise au point d'une droite. Qu'est-ce que je fais mal?

Merci d'avance.


Juste au cas où, voici le code qui réutilise l'onglet lorsqu'un nouvel onglet est demandé une extension

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);
    }
  }
}
Était-ce utile?

La solution

Lorsque vous recevez l'événement TabOpen, il est trop tôt pour le contenu de la page à charger encore. Lorsque vous recevez l'événement TabOpen, cependant, vous devez vous inscrire pour la charge ou DOMContentLoaded. Lorsque vous recevez cet événement, vous devriez être en mesure d'accéder à l'URI.

Autres conseils

Je suppose que vous pouvez extraire le comportement voulu de la mise en œuvre dans le Tab Mix Plus extension

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top