2009-11-06 5 views
2

Si ma propre barre latérale reste ouverte lorsque Firefox est fermé, elle s'affiche de nouveau au démarrage. Je trouve cela indésirable et préfère qu'il reste caché jusqu'à ce qu'il soit ouvert manuellement. Est-il possible d'arrêter cela?Comment puis-je empêcher Firefox de montrer la barre latérale de mon extension au démarrage?

J'ai essayé d'ajouter ce morceau de code à la fonction d'initialisation de mon extension afin de fermer la barre latérale si elle n'apparaît:

toggleSidebar("mySidebar", false); 

Cela ne fonctionne semble pas trop trop cohérente - il semble ignorer la faux paramètre et juste bascule la barre latérale! Quand il fonctionne correctement, il a des effets secondaires indésirables - J'ai besoin d'ouvrir et de fermer la barre latérale une fois avant de montrer n'importe quel contenu. Bizarre, mais je présume qu'une partie de l'opinion de Firefox quant à la visibilité de la barre latérale est désynchronisée.

Il semble que d'autres ont le même problème sur le MozillaZine forums.

Répondre

2

Vous pouvez également ajouter un observateur au processus d'arrêt, et fermez la barre latérale là. J'ai eu le même problème que vous et j'ai fini par suivre cette voie, car nous avions déjà un observateur pour faire un autre nettoyage.

Le code ressemble à ceci, lors de l'initialisation de la principale superposition:

var current = this; 
    var quitObserver = { 
    QueryInterface: function(aIID) { 
     if (aIID.equals(Components.interfaces.nsIObserver) || aIID.equals(Components.interfaces.nsISupports)) { 
     return this; 
     } 
     throw Components.results.NS_NOINTERFACE; 
    }, 
    observe: function(aSubject,aTopic,aData) { 
     var mainWindow = current._windowMediator.getMostRecentWindow("navigator:browser"); 
     var sidebar = mainWindow.document.getElementById("sidebar"); 
     if (sidebar.contentWindow.location.href == "chrome://daisy/content/sidebar.xul") { 
     mainWindow.toggleSidebar('openDaisySidebar', false); 
     } 
    } 
}; 

setTimeout(function() { 
    var mainWindow = current._windowMediator.getMostRecentWindow("navigator:browser"); 
    var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService); 
    observerService.addObserver(quitObserver,"quit-application-granted",false); 
},2000); 

espoir qui aide.

+0

Ruse! J'ai eu du mal à faire fonctionner cela (en raison notamment du manque de débogage à l'arrêt!), Mais j'ai finalement trouvé que cela fonctionnait pour quit-application-requested. J'ai trouvé que même si je pouvais toujours obtenir la fenêtre, il n'y avait aucun document au moment où le quit-application-accordé a été viré. – Mat

0

toggleSidebar("mySidebar", false); ne fonctionne pas car le second paramètre signifie "forceOpen" et non un indicateur d'ouverture/fermeture. Comme quelqu'un a répondu sur Mozillazine, c'est parce que Firefox conserve juste l'état de la barre latérale entre les sessions. Etes-vous sûr que vous devez être différent ici?

Voici le code dans Firefox qui ouvre la barre latérale au démarrage:

http://mxr.mozilla.org/mozilla-central/source/browser/base/content/browser.js#999 (les lignes peuvent être lorsque vous accédez à plus tard - il est le lien vers la dernière version de la source)

1000  let box = document.getElementById("sidebar-box"); 
1001  if (box.hasAttribute("sidebarcommand")) { 

Et voici où l'attribut sidebarcommand se persistait:

http://mxr.mozilla.org/mozilla-central/source/browser/base/content/browser.js#1422

1373 function BrowserShutdown() 
... 
1426 if (!enumerator.hasMoreElements()) { 
1427  document.persist("sidebar-box", "sidebarcommand"); 

Je vous conseille d'essayer ceci:
Si la fenêtre en cours est la dernière et la barre latérale est ouverte,

  • soit fermer la barre latérale avant BrowserShutdown (il est registered as an unload handler for the window)
  • trick le BrowserShutdown persister la attributs right (correspondant au cas "sidebar not opened")
  • ou après que BrowserShutdown écrase les valeurs persistantes avec celles dont vous avez besoin.

Si vous venez avec la solution de travail, s'il vous plaît le partager avec d'autres, de préférence sur MDC: https://developer.mozilla.org/En/Code_snippets/Sidebar

+0

Cool. Je pensais que le drapeau forceOpen n'était pas ouvert/fermé, mais c'est confirmé. Présumer en passant faux ne va pas me faire de mal. Je pense que je dois être différent parce que mon encadré n'a de sens que s'il y a une URL valide dans la barre d'URL. Je pourrais juste afficher une barre latérale générique dans ce cas je suppose. Je vais essayer certaines de ces idées. Merci. – Mat

Questions connexes