Réutilisant un onglet dans Firefox cas, TabOpen, et au-delà
-
13-09-2019 - |
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);
}
}
}
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