Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  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 :
    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 :
    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 :
    <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 Nicolas Delaforge
    Inscrit en
    avril 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Nom : Nicolas Delaforge
    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 :
    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 :
    <xul:description value="mon label" style="font-weight:bold;"/>
    ou encore
    Code :
    <xul:description class="boldface" value="mon label"/>
    avec une règle CSS
    Code :
    .boldface{ font-weight:bold; }
    en JS cela donnerait un truc du genre :
    Code :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •