Riutilizzo di una scheda nel caso di Firefox, TabOpen, e al di là
-
13-09-2019 - |
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);
}
}
}
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