Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[E4X] Insérer du HTML dans du XUL (préfixer les tags)

4 réponses
Avatar
kael
Bonsoir,

En utilisant E4X, je souhaiterais insérer dans du XUL un fragment d'HTML
extrait d'une <entry/> ATOM.

Le problème est que pour être insérés dans du XUL, les tags HTML doivent
être préfixés avec un namespace ; e.g. :

<window id="yourwindow"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<html:p>Foobar</html:p>
</window>


Avec E4X, j'obtiens ceci :


const ns_xul =
"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
const ns_html = "http://www.w3.org/1999/xhtml";
const ns_atom = "http://www.w3.org/2005/Atom";

var xul = <window id="yourwindow" xmlns:html={ns_html} xmlns={ns_xul}>
<label value="Put your XUL here!"/>
</window>;

var entry = <entry xmlns={ns_atom}>
<content xml:base="http://example.net/feed" type="html" >
<p>Foobar</p>
</content>
</entry>;

if (entry.ns_atom::content.@type == 'html') {
var p = entry.ns_atom::content.*::*;
p.setNamespace(ns_html);
xul.appendChild(p);
print(xul);
}

> <window id="yourwindow"
> xmlns:html="http://www.w3.org/1999/xhtml"
> xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
> <label value="Put your XUL here!"/>
> <p xmlns:xhtml="http://www.w3.org/1999/xhtml"
> xmlns="http://www.w3.org/1999/xhtml">Foobar</p>
> </window>


Existe-t-il une méthode JavaScript pour préfixer des tags ?

Merci.

--
kael

4 réponses

Avatar
Mickaël Wolff
kael a écrit :
Existe-t-il une méthode JavaScript pour préfixer des tags ?



Tu a la méthode createElementNS
<http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-DocCrElNS> qui
permet de créer un nœud dans un namespace spécifique. Je n'en sais pas
plus. Au fait, comment greffes-tu les nœuds du fichier RSS ? Directement
avec insertNode ou l'importes-tu avant avec importNode ?

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Seeking for a position <http://lupusmic.org/pro/>
Avatar
kael
Mickaël Wolff wrote, On 01/22/2009 12:50 AM:
kael a écrit :
Existe-t-il une méthode JavaScript pour préfixer des tags ?



Tu a la méthode createElementNS



Merci pour l'info.

<http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-DocCrElNS> qui
permet de créer un nœud dans un namespace spécifique. Je n'en sais pas
plus. Au fait, comment greffes-tu les nœuds du fichier RSS ? Directement
avec insertNode ou l'importes-tu avant avec importNode ?



Euh, je n'utilise aucunes de ces méthodes. :)

Finalement, j'ai regardé le code d'une extension RSS, et il est en fait
(théoriquement) possible d'insérer du HTML dans du XUL sans préfixer les
tags comme dans cet exemple
<https://developer.mozilla.org/en/Feed_content_access_API#Example.3a_Reading_a_feed_from_the_Web>.

--
kael
Avatar
Jean-Marc Desperrier
kael wrote:
[...]
Finalement, j'ai regardé le code d'une extension RSS, et il est en fait
(théoriquement) possible d'insérer du HTML dans du XUL sans préfixer les
tags comme dans cet exemple
<https://developer.mozilla.org/en/Feed_content_access_API#Example.3a_Reading_a_feed_from_the_Web>.



Moi, j'ai m'impression qu'ils insèrent dans une page HTML dans cet exemple.

Sinon si tu veux que le document soit du xml bien formé et que les
éléments xhtml n'ait pas de suffixe, il suffit de faire de xhtml le
namespace par défaut.

Comme ceci :
<xul:window xul:id="yourwindow"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<p>Foobar</p>
</xul:window>
Avatar
kael
Jean-Marc Desperrier wrote, On 01/29/2009 12:12 PM:
kael wrote:
[...]
Finalement, j'ai regardé le code d'une extension RSS, et il est en fait
(théoriquement) possible d'insérer du HTML dans du XUL sans préfixer les
tags comme dans cet exemple
<https://developer.mozilla.org/en/Feed_content_access_API#Example.3a_Reading_a_feed_from_the_Web>.



Moi, j'ai m'impression qu'ils insèrent dans une page HTML dans cet exemple.



Oui, effectivement ; je me suis emmêlé les pinceaux entre une extension
qui utilise le même pattern que dans l'exemple ci-dessus (mais qui
insère le contenu d'un feed sous la forme de labels XUL et non en HTML),
et l'insertion "brute de force" de HTML dans le XUL.

Sinon si tu veux que le document soit du xml bien formé et que les
éléments xhtml n'ait pas de suffixe, il suffit de faire de xhtml le
namespace par défaut.

Comme ceci :
<xul:window xul:id="yourwindow"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<p>Foobar</p>
</xul:window>



En fait, pour insérer du HTML dans une extension (et non dans le XUL
comme je le croyais), il existe une technique qui consiste à encoder une
page HTML en une data:URI et à passer cette data:URI comme valeur de
l'attribut 'src' de la balise <xul:browser/>.

cf. <https://developer.mozilla.org/En/XUL/Browser#a-src> &
<http://mxr.mozilla.org/thunderbird/source/toolkit/components/viewsource/content/viewPartialSource.js#202>.

--
kael