Pregunta

He seguido un tutorial sobre la reutilización de las pestañas dentro de Firefox, y ahora mismo mi extensión lo hace bien. Sin embargo, también debe volver a usar pestañas que se abren desde el exterior (de alguna aplicación, menú de inicio, etc.). ¿Cómo puedo hacer esto?

He intentado añadir un detector de eventos para el evento TABOPEN, pero cuando intento acceder al

event.target.linkedBrowser.currentURI.spec

su valor es "about: blank". Yo esperaba que la dirección real que he escrito en la barra de direcciones (se abre automáticamente en una nueva pestaña), o la dirección que abro desde otra aplicación, para que pueda cerrar la pestaña de inmediato, y el foco la correcta. ¿Qué estoy haciendo mal?

Gracias de antemano.


Por si acaso, aquí está el código que vuelve a utilizar la pestaña cuando se solicita una nueva pestaña desde una extensión

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);
    }
  }
}
¿Fue útil?

Solución

Cuando se recibe el evento TABOPEN, es demasiado pronto para que el contenido de la página se cargue todavía. Cuando recibe el evento TABOPEN, sin embargo, deberá registrarse en la carga o DOMContentLoaded. Cuando recibe ese caso, usted debería ser capaz de acceder a la URI.

Otros consejos

Creo que se puede extraer lo que se desea de la aplicación en el Tab Mix Plus extensión

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top