Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Chargement d'une feuille de style

Envoyé par : papy

Date : 27/06/2006 10:57

Bonjour,

j'aurais besoin de charger dynamiquement une feuille de style dans un document XUL, mais je n'ai pas trouvé de fonction qui permettent de le faire (comme loadOverlay ou loadBindingDocument). Si quelqu'un a une idée elle sera plus que bienvenue ;)

# Re: Chargement d'une feuille de style

Envoyé par : Zmx

Date : 27/06/2006 14:05

Une idée: Dezip le chrome de la Web developper toolbar qui le fait, et chercher comment il le fait =) (quoique, il fait pour du html ... peut etre que je m'avance un peu trop)

# Re: Chargement d'une feuille de style

Envoyé par : papy

Date : 27/06/2006 14:32

Merci pour l'idée, je ne connais pas cette extension je vais pouvoir pousser mes investigations un peu plus loin.

# Re: Chargement d'une feuille de style

Envoyé par : papy

Date : 27/06/2006 15:15

Résultat des recherches, c'est bête et méchant comme on dit, cette extension lit le contenu du fichier et l'injecte dans une balise <style> dans le header de la page.

var inputStream      = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
var scriptableStream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
inputStream.init(filePicker.file, 0x01, 0444, null);
scriptableStream.init(inputStream);
webdeveloper_userStyleSheet = scriptableStream.read(scriptableStream.available());
scriptableStream.close();
inputStream.close();
...
headElementList = pageDocument.getElementsByTagName("head");
styleElement    = pageDocument.createElement("style");
styleElement.setAttribute("id", "webdeveloper-add-user-style-sheet");
styleElement.setAttribute("type", "text/css");
styleElement.appendChild(pageDocument.createTextNode(webdeveloper_userStyleSheet));

Après quelques tests je dirais que ca ne peut pas marcher avec XUL, en effet il ne prend en compte ni la balise <style> ni la balise <link> (pour inclure le style avec un nom de fichier et non directement avec le contenu). Apparement ca marche uniquement avec le tag <?xml-stylesheet href='...' type='text/css'?> mais celui la je ne sais pas vraiment si je peux le rajouter dynamiquement.

# Re: Chargement d'une feuille de style

Envoyé par : thefab

Date : 27/06/2006 15:44

Tu devrais trouver ce que tu cherches parmis les objets CSS.

Avec:

document.styleSheets

Tu peux obtenir la liste des feuilles de styles associées au document (HTML, XML ou XUL)

Ensuite tu devrais pouvoir en ajouter vu que c'est un tableau... A voir si ça fonctionne bien comme ça ?

Fabrice

# Re: Chargement d'une feuille de style

Envoyé par : laurentj

Date : 27/06/2006 17:21

Apparement ca marche uniquement avec le tag <?xml-stylesheet href='...' type='text/css'?> mais celui la je ne sais pas vraiment si je peux le rajouter dynamiquement.

bien sûr que si. c'est un noeud dom comme les autres. Une "processing instruction" pour être plus précis. Que tu peux créer avec document.createProcessingInstruction

Et ensuite ajouter à ton document comme n'importe quel autre noeud dom...

Par contre, est ce que gecko va charger la feuille de style ? sais pas... à tester.

# Re: Chargement d'une feuille de style

Envoyé par : papy

Date : 28/06/2006 15:10

J'ai testé les deux solutions proposées :

  • la première via document.styleSheets ne fonctionne pas, c'est un tableau en readonly
  • la seconde via la fonction createProcessingInstruction n'a pas l'air de fonctionner non plus, j'ai cherché sur le net pour voir la manière de l'utiliser, j'ai essayé comme ceci :
var css = document.createProcessingInstruction('xml-stylesheet', 'type="text/css" href="http://reggie/bradypus/test.css"');
document.appendChild(css);

ca n'a pas l'air de faire grand chose

Merci quand même pour vos propositions. J'ai pensé à une autre solution, mais elle n'est pas franchement jolie, ca ressemble plus a un hack qu'autre chose : créer un overlay vide avec juste la feuille de style et le charger lui dynamiquement...

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.