Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Autres langages pour le Web
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/03/2011, 11h54   #1
Membre éclairé
 
Avatar de Linio
 
Inscription : octobre 2005
Messages : 427
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 427
Points : 304
Points : 304
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
Linio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 15h28   #2
Membre éclairé
 
Avatar de Linio
 
Inscription : octobre 2005
Messages : 427
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 427
Points : 304
Points : 304
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
Linio est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/11/2011, 17h40   #3
Candidat au titre de Membre du Club
 
Nicolas Delaforge
Inscription : 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 : 14
Points : 14
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
Snoogy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h21.


 
 
 
 
Partenaires

Hébergement Web