J'ai suivi un tutoriel sur la réutilisation des onglets dans Firefox, et maintenant mon extension le fait bien. Cependant, j'ai également besoin de réutiliser les onglets ouverts de l'extérieur (à partir de certaines applications, démarrer le menu, etc.). Comment puis-je faire cela?Réutilisation d'un onglet dans Firefox, événement TabOpen et au-delà
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 m'attendais à l'adresse réelle que j'ai tapé dans la barre d'adresse (s'ouvre automatiquement dans un nouvel onglet), ou à l'adresse que j'ouvre à partir d'une autre application, donc je peux fermer immédiatement cet onglet, et mettre au point le bon. 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);
}
}
}
Merci, j'ai compris qu'il pourrait être une solution possible. Ce n'est pas ce que j'espérais, puisque l'onglet est ouvert pendant une courte période (juste avant de le fermer si un autre onglet avec la même adresse existe). –
Ça devrait être plutôt rapide. à propos de: blank va s'en aller très très vite. Vous aurez besoin d'utiliser DOMContentLoaded si vous êtes préoccupé par la vitesse. – sdwilsh
Exactement ce que j'ai fait, mais encore, je peux voir cet onglet pour une courte période de temps. Ce dont j'ai vraiment besoin, c'est d'une sorte d'événement "PreTabOpen" (: J'ai un autre conseil sur la façon de le faire, alors je vais essayer avant de demander plus d'aide ici. –