2009-06-14 5 views
1

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); 
    } 
    } 
} 

Répondre

2

Lorsque vous recevez l'événement TabOpen, il est trop tôt pour que le contenu de la page soit encore chargé. Lorsque vous recevez l'événement TabOpen, cependant, vous devez vous inscrire pour charger ou DOMContentLoaded. Lorsque vous recevez cet événement, vous devriez pouvoir accéder à l'URI.

+0

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). –

+0

Ç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

+0

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. –

0

Je suppose que vous pouvez extraire le comportement voulu de la mise en œuvre dans le Tab Mix Plus l'extension

Questions connexes