Envoyé par : Raphael
Date : 11/07/2007 11:08
Bonjour, depuis plusieurs semaines maintenant, j'essaie de parvenir à gérer les icônes (favicon dans le cas de pages web) des onglets d'un tabbrowser... en vain. Je me sers de Tabbrowser pour charger des pages .xul et je voudrais pouvoir affecter un type d'icône selon la page ouverte.
Voici les méthodes de tabbrowser.xml que je trouve les plus pertinentes :
<method name="setIcon"> <parameter name="aTab"/> <parameter name="aURI"/> <body> var browser = this.getBrowserForTab(aTab); browser.mIconURL = aURI; this.updateIcon(aTab); for (var i = 0; i < this.mProgressListeners.length; i++) { var p = this.mProgressListeners[i]; if ('onLinkIconAvailable' in p) p.onLinkIconAvailable(browser); } </body> </method> <method name="updateIcon"> <parameter name="aTab"/> <body> var browser = this.getBrowserForTab(aTab); if (!aTab.hasAttribute("busy") && browser.mIconURL) aTab.setAttribute("image", browser.mIconURL); else aTab.removeAttribute("image"); </body> </method> <method name="shouldLoadFavIcon"> <parameter name="aURI"/> <body> return (aURI && this.mPrefs.getBoolPref("browser.chrome.site_icons") && this.mPrefs.getBoolPref("browser.chrome.favicons") && ("schemeIs" in aURI) && (aURI.schemeIs("http") || aURI.schemeIs("https"))); </body> </method> <method name="useDefaultIcon"> <parameter name="aTab"/> <body> var browser = this.getBrowserForTab(aTab); if (browser.contentDocument instanceof ImageDocument) { if (this.mPrefs.getBoolPref("browser.chrome.site_icons")) { try { var sz = this.mPrefs.getIntPref("browser.chrome.image_icons.max_size"); if (!sz) return; var req = browser.contentDocument.imageRequest; if (!req || !req.image || req.image.width > sz || req.image.height > sz) return; this.setIcon(aTab, browser.currentURI.spec); } catch (e) { } } } else if (this.shouldLoadFavIcon(browser.currentURI)) { var url = browser.currentURI.prePath + "/favicon.ico"; if (!this.isIconKnownMissing(url)) this.setIcon(aTab, url); } </body> </method> <method name="addToMissedIconCache"> <parameter name="aURI"/> <body> var entry = this.openCacheEntry(aURI, Components.interfaces.nsICache.ACCESS_READ_WRITE); if (!entry) return; if (entry.accessGranted == Components.interfaces.nsICache.ACCESS_WRITE) // It's a new entry. Just write a bit of metadata in to the entry. entry.setMetaDataElement("Icon", "Missed"); entry.markValid(); entry.close(); </body> </method>
Et voici le descriptif d'un tabbrowser-tab :
<binding id="tabbrowser-tab" display="xul:box" extends="chrome://global/content/bindings/tabbox.xml#tab"> <content chromedir="ltr" closetabtext="Fermer l'onglet"> <xul:hbox class="tab-middle box-inherit" xbl:inherits="align,dir,pack,orient,selected" flex="1"> <xul:image class="tab-icon" xbl:inherits="validate,src=image"/> <xul:label class="tab-text" xbl:inherits="value=label,accesskey,crop,disabled" flex="1"/> </xul:hbox> <xul:toolbarbutton anonid="close-button" tabindex="-1" class="tab-close-button"/> </content> <implementation> <field name="mOverCloseButton">false</field> <field name="mCorrespondingMenuitem">null</field> </implementation> <handlers> <handler event="mouseover"> var anonid = event.originalTarget.getAttribute("anonid"); if (anonid == "close-button") this.mOverCloseButton = true; </handler> <handler event="mouseout"> var anonid = event.originalTarget.getAttribute("anonid"); if (anonid == "close-button") this.mOverCloseButton = false; </handler> <handler event="mousedown" button="0" phase="capturing"> if (this.mOverCloseButton) event.stopPropagation(); </handler> </handlers> </binding>
Voilà, sachant que je ne souhaite faire qu'une seule chose : pouvoir mettre l'icône que je désire sur l'onglet que j'aurais désigné...
Je tourne en rond depuis des semaines donc je vous serais vraiment reconnaissant si vous aviez un début de solution, merci d'avance.
Envoyé par : Raphael
Date : 18/08/2007 22:18
J'up mon problème, on ne sait jamais, car je suis vraiment bloqué et à 2 doigts d'abandonner tabbrowser pour du iframe + tabs normaux, ce qui serait dommage quand même... =)
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.