p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Membre éclairé Avatar de Linio
    Inscrit en
    octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : octobre 2005
    Messages : 431
    Points : 311
    Points
    311

    Par défaut XUL - Insérer du contenu HTML dans une fenêtre

    Bonjour,

    Je ne sais pas si je poste dans la bonne section, mais les rares postes XUL que j'ai vu étaient ici alors...

    Voilà, je dois sur un petit projet d'extension pour Thunderbird afficher du html dans une fenêtre XUL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" 
    xmlns:html="http://www.w3.org/1999/xhtml" title="blabla">
    
    
    <vbox>
    <hbox align="center">
         <box id="final" width="300">
    	
    	<html:b>bob</html:b>
         </box>
    	
    </hbox>
    <button label="Valider" oncommand="validate();"/>
    
    </vbox>
    
    </window>
    Je suis donc parti sur des exemples que j'ai vu qui spécifiaient qu'il suffisait d'insérer le xmlns de l'html et ça marchait. Effectivement, l'exemple précédent marche bien, bob est bien formaté en gras. En revanche, je dois insérer du HTML en fonction des actions faites par l'utilisateur. Et là... c'est le drame, je n'arrive pas à intégrer mon code dans la page. Si je le met en tant que texte (avec .textContent = qqch), le HTML n'est pas formaté, et si j'essaye de construire un arbre XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var parser = new DOMParser();
    xmlsig = parser.parseFromString(sig,"text/xml");
    Erreur*: uncaught exception: [Exception... "Node cannot be inserted at the specified point in the hierarchy" code: "3" nsresult: "0x80530003 (NS_ERROR_DOM_HIERARCHY_REQUEST_ERR)" location: "chrome://menu/content/sig.js Line: 121"]

    Erreur*: préfixe non lié à un espace de noms
    Fichier Source*: chrome://menu/content/sig.xul
    Ligne*: 1, Colonne*: 1
    Code Source*:
    <html:table style='border:0px;'><html:tr><html:td><html:b>bob</html:b></html:td></html:tr><html:tr><html:td></html:td></html:tr><html:tr><html:td></html:td></html:tr><html:tr><html:td></html:td></html:tr></html:table>


    J'ai essayé de rajouter le xmlns directement sur l'élément table, mais je me retrouve toujours avec l'erreur de l'insertion et une erreur : Entité non définie...



    Si quelqu'un a tenté un truc aussi peu habituel, et a une idée, je suis preneur...

    (En fait j'ai le même problème quand j'insère du XUL :/)
    Est-ce que le passage de ma chaine de caractère en élément XML n'est pas la bonne méthode? Y'a t'il une fonction pour créer un arbre xul?
    Linio

  2. #2
    Membre éclairé Avatar de Linio
    Inscrit en
    octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : octobre 2005
    Messages : 431
    Points : 311
    Points
    311

    Par défaut

    Bon, et bien j'ai trouvé une solution, je la mets si ça intéresse quelqu'un.
    En gros on passe plutôt le xmlns du xul sur un nom différent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xul:window xmlns="http://www.w3.org/1999/xhtml" xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" title="blabla">
    Ensuite dans le code, on peut mettre du html sans le préfixer :

    <div id="final"> </div>

    Et dans le javascript, on fait comme on ferait en html (avec .innerHTML = machaine).

    C'est le moyen le plus simple que j'ai trouvé, même si ça pose quand même des contraintes.
    Linio

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    avril 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : avril 2008
    Messages : 12
    Points : 15
    Points
    15

    Par défaut

    Si tu utilises le namespace html, il faudra préfixer tes balises xul de xul:*, sinon il faut préfixer les balises html de html:*.

    Côté javascript, insérer des éléments issus d'un autre namespace que le NS par défaut en Javascript, il faut utiliser les fonctions suffixées NS comme document.createElementNS.

    Attention, il faut utiliser l'URI complète du namespace et pas seulement son préfixe que l'interpréteur JS ne reconnaîtra pas.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.createElementNS("http://www.w3.org/1999/xhtml","div");
    C'est valable pour tous les autres namespaces, comme SVG.

    Cela dit pour l'exemple, je ne vois vraiment pas l'intérêt d'utiliser du HTML pour faire du texte en gras, alors que XUL permet d'exploiter les styles CSS. Il suffit de créer l'élement XUL suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xul:description value="mon label" style="font-weight:bold;"/>
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xul:description class="boldface" value="mon label"/>
    avec une règle CSS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .boldface{ font-weight:bold; }
    en JS cela donnerait un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var descr = document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "description");
    descr.setAttribute("class","boldface);
    
    document.getElementById('final').appendChild(descr);
    Prière d'éviter d'utiliser innerHTML

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Contenu dynamique dans une fenêtre
    Par bzerath dans le forum Fenêtres/Dialogues
    Réponses: 5
    Dernier message: 03/03/2011, 14h14
  2. [MVC3/Razor] écrire du contenu html dans une vue
    Par CUCARACHA dans le forum ASP.NET MVC
    Réponses: 1
    Dernier message: 30/01/2011, 22h55
  3. Insérer un code HTML dans une form ?
    Par Invité(e) dans le forum Débutant
    Réponses: 2
    Dernier message: 03/07/2009, 15h28
  4. Insérer des balises HTML dans une zone de texte
    Par selinav dans le forum Éditeurs
    Réponses: 1
    Dernier message: 16/12/2008, 20h52
  5. [XSLT] Afficher du contenu HTML dans une feuille XSL
    Par krapno dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 24/10/2006, 14h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo