La reutilización de una pestaña en caso de Firefox, TABOPEN, y más allá
-
13-09-2019 - |
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);
}
}
}
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