Envoyé par : chBok
Date : 26/09/2006 16:06
Je cherche une solution technique et élégante à la question suivante : Comment obtenir en overlay un cadre flottant, hébergeant un contenu XUL, s'affichant au dessus de la page du navigateur en cours (page HTML par ex) ET indépendant de l'onglet sélectionné.
L'indépendance de la page 'document' est le plus dur à gérer. Ce cadre flottant verrait bien sa place par exemple à l'intérieur d'un <stack>, mais a-t-on le droit de modifier le noeud DOM vbox gérant les <tabpanels> des onglets de navigation ?
Envoyé par : Paul Rouget
Date : 27/09/2006 01:11
Il peut etre simplement fils du <window/> de firefox (chrome://browser/content) et flotter au dessus de toute l'interface de Firefox, non ? À toi de faire en sorte qu'il ne sorte pas du <tabpanels/>.
Envoyé par : chBok
Date : 27/09/2006 11:28
oui, j'y ai pensé, mais comment du fait flotter un élément XUL comme une <box> au dessus de l'interface, sans passer par le système de pile <stack> comme je le citais ?
A moins d'avoir mal cherché dans les styles CSS applicables aux éléments XUL, je ne vois pas trop.
Je tenterai en XBL et overlay d'insérer une <stack> englobant le noeud des <tabpanels>... Je sens que ca va être sport
Envoyé par : Paul Rouget
Date : 28/09/2006 07:32
embarque ton xul dans un élément <div/> floattant.
Envoyé par : chBok
Date : 28/09/2006 11:11
oui, et je place ce <div> sur quel noeud DOM ? Il doit être indépendant de la page en cours, donc attaché à l'interface elle même de Firefox.
Pas simple mon affaire.
Envoyé par : papy
Date : 03/10/2006 15:31
La solution utilisant les stacks n'est pas 'viable'. En effet les composants qui possèdent des vues spéciales (tree, iframe, deck...) s'affichent au même niveau que la stack... (cf http://xulfr.org/forums/read.php?1,5693, http://xulfr.org/forums/read.php?1,5544 et http://xulfr.org/forums/read.php?1,5608)
Enfin je ne retrouve toujours pas la page qui indique cette limitation donc ca reste a voir, et si il existe une solution elle m'intéresse beaucoup.
Envoyé par : Paul Rouget
Date : 04/10/2006 11:02
L'extension de google pour son notebook fait exactement ce que tu décris. Jetes un coup d'oeil au code.
Mais sinon je ne vois pas trop la difficulté de mettre un div dans la <window> de Firefox et de gérer sa visibilité en fonction de la page en cours.
Envoyé par : chBok
Date : 04/10/2006 11:42
ok merci, je vais y jeter un oeil.
Envoyé par : papy
Date : 04/10/2006 12:55
La solution utilisant la balise div fonctionne parfaitement, il suffit de mettre le code suivant en tant que style CSS (en remplacant les coordonnées bien évidemment)
position: fixed; left: 123px; top: 321px;
Après tu dois facilement pouvoir ajouter cette balise quelque part dans la fenêtre principale de firefox via un overlay et la contrôler a ta guise.
Envoyé par : TrucEmpty
Date : 04/10/2006 17:57
Bonjour,
Est-il possible d'avoir une réponse plus détaillée ???
Merci d'avance, :)
Envoyé par : chBok
Date : 04/10/2006 18:34
TrucEmpty a écrit:
Bonjour,
Est-il possible d'avoir une réponse plus détaillée
???
Merci d'avance,
:)
Sans aucun problème. Dès que j'ai résolu l'affaire dans le détail, je vous en ferai part, avec un petit exemple à la clef
Envoyé par : chBok
Date : 04/10/2006 22:49
J'ai avancé un peu. En fait, j'avais déjà travaillé sur le sujet, et j'utilisais en effet des éléments XUL avec un style position:fixed.
Mon problème, est que mon cadre était parfois masqué par les données d'une page Web qui se chargeait ensuite. Mais j'ai trouvé une solution pas évidente (et grâce au companion joga) :
__L'overlay__ <window id="main-window"> <vbox id="test_cadre" style="right: 0px; bottom: 0px; position: fixed; border: 1px solid grey;" hidden="false"> <label value="texte" /> <button label="test" /> </vbox> </window>
Le script place un scrutateur sur un changement d'onglet. Ici, j'utilise l'événement particulier pageshow pour mes besoins :
window.getBrowser().addEventListener("pageshow", function(e){cadre(e); }, false); cadre = function(e) { var cd = document.getElementById('test_cadre'); var ncd = cd.cloneNode(true); var windowElt = document.getElementById("main-window"); windowElt.removeChild(cd); windowElt.appendChild(ncd); }
L'"astuce" revient à copier le nœud DOM du cadre, de l'enlever de l'arbre DOM, et de le remettre. De ce fait, il apparait toujours au dessus de tous les éléments affichés à l'écran.
C'est sioux.
Envoyé par : laurentj
Date : 05/10/2006 12:51
chbox: et en mettant simple un style z-index:1000; par exemple sur ta div ?
Envoyé par : chBok
Date : 05/10/2006 17:02
laurentj > non, j'avais essayé ca aussi. L'extension JOGA procède bien de cette façon. J'ai tenté de regarder dans le code de google notebook, mais google a compacté tout le code javascript en le rendant difficle à lire.
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.