Ne pas utiliser ActiveX pour afficher le résultat d'une transformation XSLT dans Internet Explorer
Bonjour,
Je débute et j'ai trouvé un code qui fonctionne bien pour associer en externe (dans un fichier HTML) un fichier XML et XSL et permettre ainsi la visualisation du résultat aussi bien dans IE que dans les autres navigateurs.
Néanmoins, la méthode utilisée pour IE avec des contrôles ActiveX n'est pas très pratique pour l'utilisateur qui doit modifier le paramétrage de son navigateur et diminuer ainsi la sécurité.
J'ai trouvé deux articles et exemples de code qui permettent de se passer des contrôles ActiveX mais j'ai du mal à l'intégrer dans mon code initial (faute d'expérience probablement :( :()
Qui pourrait m'aider à modifier mon code pour que cela fonctionne dans IE sans utiliser les contrôles ActiveX ?
Voici le code initial (complet) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
<title>Visualisation</title>
<script>
function loadXMLDoc(filename)
{
if (window.ActiveXObject)
{
xhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
else
{
xhttp = new XMLHttpRequest();
}
xhttp.open("GET", filename, false);
try {xhttp.responseType = "msxml-document"} catch(err) {} // Helping IE11
xhttp.send("");
return xhttp.responseXML;
}
function displayResult()
{
xml = loadXMLDoc("Flux.xml");
xsl = loadXMLDoc("XSLT.xsl");
// code pour IE
if (window.ActiveXObject || xhttp.responseType == "msxml-document")
{
ex = xml.transformNode(xsl);
document.getElementById("contenu").innerHTML = ex;
}
// code pour Chrome, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
{
xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
resultDocument = xsltProcessor.transformToFragment(xml, document);
document.getElementById("contenu").appendChild(resultDocument);
}
}
</script> </head>
<body onload="displayResult()">
<div id="contenu"> </div>
</body>
</html> |
Et le bout de code à adapter pour éviter les contrôles ActiveX pour IE :
Code:
1 2 3 4 5
| var xml = document.createElement("xml");
xml.src = "data.xml";
document.body.appendChild(xml);
var xmlDocument = xml.XMLDocument;
document.body.removeChild(xml); |
Autre variante trouvée sur Internet :
Code:
1 2 3 4 5 6 7 8 9 10 11
| function parseWitoutActiveX(str){
var doc= null;
var xmlIsland = document.createElement('xml');
if(xmlIsland){
xmlIsland.setAttribute('id','xmlActiveXGetRid');
xmlIsland.innerHTML = str;
document.body.appendChild(xmlIsland);
var doc = xmlIsland.XMLDocument;
document.body.removeChild(xmlIsland);
return doc;
} |
Et voici les liens correspondants avec les explications (qui pour moi ne sont pas suffisantes... :?) :
http://http://dean.edwards.name/weblog/2006/04/easy-xml/
http://www.codeproject.com/Tips/5877...and-Making-the
Merci par avance pour votre aide ! ;)