Identifier navigateur pour utiliser la méthode adaptée
Bonjour
Je n'arrive pas à trouver la bonne méthode permettant d'identifier la configuration de mon navigateur afin d'utiliser la méthode adaptée pour charger un xml issu de webservice.
Mon code javascript lance la fonction postHTML()
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
//Chargement des fichiers XML et XSL pour les navigateurs Firefox Chrome Opera ...
function loadXML(xmlPath)
{
var xmlhttp = new window.XMLHttpRequest();
xmlhttp.open("GET", xmlPath, false);
xmlhttp.send(null);
var xmlDoc = xmlhttp.responseXML.documentElement;
return xmlDoc;
}
// Generation du rendu
function postHTML(xmlPath, xslPath, page, elementId)
{
var plugin = navigator.plugins["Contoso.Control"];
var ActixeXPoss='N';
if(plugin){
// Contoso control is installed and enabled
alert("Contoso control is installed and enabled");
}
else{
try{
plugin = new ActiveXObject("Contoso");
ActixeXPoss='O';
}
catch(e){
// Contoso control is not installed or disabled
alert("Contoso control is not installed or disabled");
}
}
if(ActixeXPoss == 'N'){
// script pour tous les navigateurs Firefox Opera ...
alert("pas avec IE");
// Chargement XML
var xslDocument = loadXML(xslPath);
// Chargement XSL
var xmlDocument = loadXML(xmlPath);
var xsltProcessor=new XSLTProcessor();
xsltProcessor.importStylesheet(xslDocument);
var htmlCode = xsltProcessor.transformToFragment(xmlDocument,document);
document.getElementById(elementId).appendChild(htmlCode);
var racine = xmlDocument;
}
else{
if (window.ActiveXObject){
// script pour IE
alert("avec IE");
// Chargement XML
var xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.load(xmlPath);
// Chargement XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM");
xsl.async = false;
xsl.load(xslPath);
// Transformation
//alert("Element récepteur = " + elementId);
document.getElementById(elementId).innerHTML = xml.transformNode(xsl);
var racine = xml.documentElement;
}
else{
alert("Transformation Xslt non supportée !");
document.getElementById(elementId).innerHTML = "Xslt non supporté";
}
} |
Auparavant ma méthode était légèrement différente, mais problème car n'étant pas compatible avec ie11.
la solution que j'avais finalement trouvé
la solution que j'avais finalement trouvé par mes propres moyens.
Je la mets pour ceux qui comme moi pourraient être intéressés.
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 47 48 49 50
|
function postHTML(xmlPath, xslPath, Page, ElementId)
{
var plugin = navigator.plugins["Msxml2.DOMDocument.3.0"];
if(Page=="Meme") var obj=document.getElementById(ElementId);
else var obj=window.opener.document.getElementById(ElementId)
if (!plugin) {
try {
plugin = new ActiveXObject("Msxml2.DOMDocument.3.0");
} catch(e) {}
}
var ActixeXPoss='N';
if(plugin){
ActixeXPoss='O';
}
if(ActixeXPoss == 'N'){
// script pour tous les navigateurs Firefox Opera ...
// Chargement XML
var xslDocument = loadXML(xslPath);
// Chargement XSL
var xmlDocument = loadXML(xmlPath);
var xsltProcessor=new XSLTProcessor();
xsltProcessor.importStylesheet(xslDocument);
var htmlCode = xsltProcessor.transformToFragment(xmlDocument,document);
obj.appendChild(htmlCode);
var racine = xmlDocument;
}
else{
// script pour IE
// Chargement XML
var xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.load(xmlPath);
// Chargement XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM");
xsl.async = false;
xsl.load(xslPath);
// Transformation
obj.innerHTML = xml.transformNode(xsl);
var racine = xml.documentElement;
}
} |
Cela fonctionne parfaitement.
Je viens par contre de découvrir, qu'avec le navigateur Edge, il y a un problème avec la transformation xsl/xslt