Spack a écrit :
Je l'ai testé et il fonctionne avec Firefox et IE:
Bonjour,
Tout d'abord merci pour cet example de XSLT en javascript, il fonctionne parfaitement sur Internet Explorer.
Malheureusement, j'ai un problème avec Firefox/1.5.0.2
C'est bien simple, dans le div qui doit recevoir le contenu de la transformation, il n'y a .. rien
Mon XML et la feuille XSL sont valides, je les ai testé en liant la feuille XSL au contenu XML .. donc le problème ne vient pas de là.
Bien sûr, javascript est activé.. j'ai repris strictement la même page que toi Spack (copier .. coller ..) et même si dans internet explorer j'ai exactement le rendu désiré, RIEN dans firefox.
Je ne comprend pas !
Quelqu'un a rencontré le même problème que moi sous firefox ? Une idée ?
Edit #1 :
Bon, j'ai réussi à faire fonctionner ton script dans firefox.
Le problème venait du fait que mon contenu xml était généré par un script php. (xml.php?d=menu)
Apparement internet explorer comprenait que c'était du xml mais pas firefox.
Un petit
header("Content-Type: text/xml");
Et c'était réglé !
Même si il y a un bug étrange .. lors de refreshs successifs, parfois la transformation n'est pas effectuée ..
Edit #2 :
Maintenant j'ai un autre problème
J'ai modifié un peu le code, afin de faire des fonctions qui conviennent mieux à mon usage du xslt ..
Voilà donc mon code, dans IE pas de problème, dans firefox 1.5, rien :
Besoin d'aide
//===============================================
// loadXML (xml)
// Renvoie le contenu d'un fichier XML/XSL (sync)
//===============================================
function loadXML(url)
{
var xmlDoc;
try
{
//===========================================
//Firefox
//===========================================
if (document.implementation && document.implementation.createDocument)
{
xmlDoc = document.implementation.createDocument('', '', null);
xmlDoc.load(url);
}
//===========================================
//Internet Explorer
//===========================================
else if (window.ActiveXObject)
{
try {
xmlDoc = new ActiveXObject('Msxml2.XMLDOM');
} catch (e) {
xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
}
xmlDoc.async = false;
xmlDoc.load(url);
}
//===========================================
//Gecko
//===========================================
else if (window.XMLHttpRequest)
{
xmlDoc = new XMLHttpRequest();
xmlDoc.overrideMimeType('text/xml');
xmlDoc.open('GET', url, false);
xmlDoc.send(null);
if (this.xmlDoc.readyState == 4) xmlDoc = xmlDoc.responseXML;
}
}
catch (e)
{
return e;
}
return xmlDoc;
}
//===============================================
//===============================================
// xsltLoad (xml, xsl, div)
// Prépare la transformation XSL
//===============================================
function xsltLoad(XML, XSL, div)
{
xsltDo(loadXML(XML), loadXML(XSL), div);
}
//===============================================
//===============================================
// xsltDo (xml, xsl, div)
// Charge le résultat de la transformation
//===============================================
function xsltDo(xml, xsl, id)
{
try
{
//===========================================
//Gecko
//===========================================
if (window.XSLTProcessor)
{
var fragment;
var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
fragment = xsltProcessor.transformToFragment(xml, document);
var target = document.getElementById(id);
target.innerHTML = "";
target.appendChild(fragment);
document.appendChild(target);
}
//===========================================
//Internet Explorer
//===========================================
else if (window.ActiveXObject)
{
var target = document.getElementById(id);
target.innerHTML = xml.transformNode(xsl);
}
}
catch (e)
{
return e;
}
}
//===============================================
Je l'appelle avec un
xsltLoad ('xml.php?d=menu', 'style/menu.xsl', 'menu');
Et mon div menu reste vide sous firefox .. aucun problème sous IE
Modifié par narc (21 Apr 2006 - 15:47)