IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Compatibilité IE et Chrome


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Homme Profil pro
    Superviseur de Hotline
    Inscrit en
    Avril 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Superviseur de Hotline
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Compatibilité IE et Chrome
    Bonjour ,

    Je tente de modifier un scipt qui ne fonctionne pour l'instant qu'avec IE
    j'ai bien avancé mais la je bloque sur cette étape
    ------------------------------------------------------------------>IE =ok
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var msxml = new ActiveXObject("Msxml2.XMLHTTP.3.0"); 
    msxml.open("POST", apiServer, false); 
    msxml.setRequestHeader("Content-Type","text/xml"); 
    msxml.setRequestHeader("SOAPaction","create"); 
    msxml.send(create); 
    var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0"); 
    xmlDoc.loadXML(msxml.responseText); 
    if(xmlDoc.text.substring(0,3) != "010") ok = false; 
    xmlDoc.setProperty("SelectionNamespaces", "xmlns:sf='xxxxxxxxxx");
    j'ai tenté cet equivalent : -------------->Chrome
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if ( navigator.userAgent.toLowerCase().indexOf('chrome') > -1) { 
    var msxml = new XMLHttpRequest();
    msxml.open("POST", apiServer, false); 
    msxml.setRequestHeader("Content-Type","text/xml"); 
    msxml.setRequestHeader("SOAPaction","create"); 
    msxml.send(create); 
    var xmlDoc = new XMLHttpRequest();
    xmlDoc.open("GET",msxml,false); 
    var text = msxml.reponseText;
    if (text.substring(0,3) != "010") ok = false; 
    xmlDoc.setProperty("SelectionNamespaces", "xmlns:sf='xxxxx'");
    ....
    Pouvez vous me venir en aide
    merci

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Salut,

    je vois une faute de frappe ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var text = msxml.reponseText; // manque le s
    Une incohérence là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlDoc.open("GET", msxml, false); // je suppose qu’il manque .responseText
    Et une instruction qui produit une erreur là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlDoc.setProperty("SelectionNamespaces", "xmlns:sf='xxxxx'");
    L’objet XMLHttpRequest standard n’a pas de méthode setProperty.
    Si tu ouvres ta console F12, tu verras certainement un message d’erreur du style « xmlDoc.setProperty is not a function ».
    Comme je ne vois pas la suite de ton code, je ne sais pas ce que cette instruction est censée faire donc je ne peux pas t’aiguiller pour trouver une alternative « non IE ».

    Note, a priori tu n’as pas besoin de faire de la détection de navigateur (en particulier, ce n’est pas toujours fiable de le faire avec navigator.userAgent). Tous les navigateurs à partir de IE7 supportent XMLHttpRequest, et il est raisonnable de penser que tu ne vas pas développer pour IE6 (sauf besoin spécifique, mais j’espère pour toi que ce n’est pas le cas).

    Autre chose, si on ne te l’a pas déjà dit, les requêtes synchrones sont déconseillées (même la console de Firefox le dit). Pour passer tes requêtes en mode asynchrone, tu dois retirer ce troisième paramètre false lorsque tu appelles open, et utiliser une fonction de rappel onreadystatechange. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    var msxml = new XMLHttpRequest();
    msxml.open("POST", apiServer);
    msxml.setRequestHeader("Content-Type", "text/xml");
    msxml.setRequestHeader("SOAPaction", "create");
     
    msxml.onreadystatechange = function () {
      if (msxml.readyState < 4) return;
      if (msxml.status !== 200) {
        console.log("msxml a retourné un code %d", msxml.status);
        alert("Problème de connexion, veuillez réessayer.");
      } else {
        var xmlDoc = new XMLHttpRequest();
        xmlDoc.open("GET", msxml.responseText);
        xmlDoc.onreadystatechange = function () {
          if (xmlDoc.readyState < 4) return;
          if (xmlDoc.status !== 200) {
            console.log("xmlDoc a retourné un code %d", xmlDoc.status);
            alert("Problème de connexion, veuillez réessayer.");
          } else {
            var text = xmlDoc.reponseText;
            if (text.substring(0, 3) !== "010") ok = false;
     
            // ...
     
          }
        };
        xmlDoc.send();
      }
    };
     
    msxml.send(create);
    Je ne rentre pas dans les détails, mais tu les découvriras assez vite si tu t’y penches. Les requêtes asynchrones sont un fondamental du développement web et la documentation ne manque pas. Par exemple : https://developer.mozilla.org/fr/doc...XMLHttpRequest
    En gros la façon de faire est la suivante :
    1. appeler open
    2. appeler les éventuels setRequestHeader et overrideMimeType
    3. (interchangeable avec 2.) assigner la fonction de rappel onreadystatechange
    4. en dernier, appeler send.


    Dans un monde idéal, tous les navigateurs supporteraient le niveau 2 de XMLHttpRequest et tu pourrais utiliser la fonction onload bien plus pratique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    var msxml = new XMLHttpRequest();
    msxml.open("POST", apiServer);
    msxml.setRequestHeader("Content-Type", "text/xml");
    msxml.setRequestHeader("SOAPaction", "create");
     
    msxml.onload = function () {
      var xmlDoc = new XMLHttpRequest();
      xmlDoc.open("GET", msxml.responseText);
      xmlDoc.onload = function () {
        var text = xmlDoc.reponseText;
        if (text.substring(0, 3) !== "010") ok = false;
     
        // ...
     
      };
      xmlDoc.send();
    };
     
    msxml.send(create);
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Candidat au Club
    Homme Profil pro
    Superviseur de Hotline
    Inscrit en
    Avril 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Superviseur de Hotline
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup Watilin
    Tu as raison je vais refondre le code pour le rendre plus propre et ne pas distinguer les X navigateur.
    Concernant la balise : xmlDoc.setProperty("SelectionNamespaces", "xmlns:sf='xxxxx'"); voici le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function createCaseComment(){ 
    var create = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; 
    create += "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"; 
    create += "<soapenv:Header>"; 
    create += "<ns1:SessionHeader soapenv:mustUnderstand=\"0\" xmlns:ns1=\"SforceService\">"; 
    create += "<ns2:sessionId xmlns:ns2=\"urn:enterprise.soap.sforce.com\">" + sid + "</ns2:sessionId>"; 
    create += "</ns1:SessionHeader>"; 
    create += "</soapenv:Header>"; 
    create += "<soapenv:Body>"; 
    create += "<create xmlns=\"urn:enterprise.soap.sforce.com\">"; 
     
    create += "<sObjects xsi:type=\"ns4:CaseComment\" xmlns:ns4=\"urn:sobject.enterprise.soap.sforce.com\">"; 
    create += "<ns4:ParentId>" + reqId + "</ns4:ParentId>"; 
    create += "<ns4:CommentBody>" + document.editPage.cas16.value + "</ns4:CommentBody>"; 
    create += "</sObjects>"; 
     
    create += "</create>"; 
    create += "</soapenv:Body>"; 
    create += "</soapenv:Envelope>"; 
     
    if ( navigator.userAgent.toLowerCase().indexOf('chrome') > -1) { 
    var msxml = new XMLHttpRequest();
    msxml.open("POST", apiServer, false); 
    msxml.setRequestHeader("Content-Type","text/xml"); 
    msxml.setRequestHeader("SOAPaction","create"); 
    msxml.send(create); 
    var xmlDoc = new XMLHttpRequest();
    xmlDoc.open("GET",msxml.responseText,false); 
    var text = msxml.responseText;
    if (text.substring(0,3) != "00a") ok = false; 
    //if(xmlDoc.text.substring(0,3) != "00a") ok = false; 
    xmlDoc.setProperty("SelectionNamespaces", "xmlns:sf='urn:sobject.enterprise.soap.sforce.com'"); 
    }
    else{
    var msxml = new ActiveXObject("Msxml2.XMLHTTP.3.0"); 
    msxml.open("POST", apiServer, false); 
    msxml.setRequestHeader("Content-Type","text/xml"); 
    msxml.setRequestHeader("SOAPaction","create"); 
    msxml.send(create); 
    var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0"); 
    xmlDoc.loadXML(msxml.responseText); 
    if(xmlDoc.text.substring(0,3) != "00a") ok = false; 
    xmlDoc.setProperty("SelectionNamespaces", "xmlns:sf='urn:sobject.enterprise.soap.sforce.com'"); 
    }
    } 
     
     
    var fin = false; 
    var count = 0; 
     
    function traverse(tree, field) { 
    if(tree.tagName == "value" && fin){ 
    prodList[count] = tree.childNodes(0).text; 
    count++; 
    } 
    if(tree.text == field) fin = true; 
    if(tree.tagName == "precision") fin = false; 
    if(tree.hasChildNodes()) { 
    var nodes=tree.childNodes.length; 
    for(var i=0; i<tree.childNodes.length; i++){ 
    traverse(tree.childNodes(i),field); 
    } 
    } 
    } 
     
    </script>
    F12 m'indique aussi que tree.childNodes n'est pas une fonction

  4. #4
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Pour childNodes, remplace simplement tes parenthèses par des crochets.

    Pour setProperty, si j’ai bien compris il s’agit de donner des indications à l’interpréteur sur la nature du XML reçu, chose qui n’a pas d’équivalent avec l’objet XMLHttpRequest standard. Si le XML que tu reçois est bien formé, tu devrais être en mesure d’utiliser responseXML à la place de responseText, et de l’analyser au moyen de XPath. Peut-être même que ton code marchera en retirant purement et simplement cette instruction setProperty. Dans le cas contraire, cette page propose peut-être un début de solution. C’est une situation que je n’ai jamais rencontrée (j’évite de travailler avec du XML), donc je ne peux pas t’aider beaucoup plus, désolé.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  5. #5
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par Speke Voir le message
    Bonjour ,

    Je tente de modifier un scipt qui ne fonctionne pour l'instant qu'avec IE
    j'ai bien avancé mais la je bloque sur cette étape
    ------------------------------------------------------------------>IE =ok
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var msxml = new ActiveXObject("Msxml2.XMLHTTP.3.0"); 
    msxml.open("POST", apiServer, false); 
    msxml.setRequestHeader("Content-Type","text/xml"); 
    msxml.setRequestHeader("SOAPaction","create"); 
    msxml.send(create); 
    var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0"); 
    xmlDoc.loadXML(msxml.responseText); 
    if(xmlDoc.text.substring(0,3) != "010") ok = false; 
    xmlDoc.setProperty("SelectionNamespaces", "xmlns:sf='xxxxxxxxxx");
    j'ai tenté cet equivalent : -------------->Chrome
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if ( navigator.userAgent.toLowerCase().indexOf('chrome') > -1) { 
    var msxml = new XMLHttpRequest();
    msxml.open("POST", apiServer, false); 
    msxml.setRequestHeader("Content-Type","text/xml"); 
    msxml.setRequestHeader("SOAPaction","create"); 
    msxml.send(create); 
    var xmlDoc = new XMLHttpRequest();
    xmlDoc.open("GET",msxml,false); 
    var text = msxml.reponseText;
    if (text.substring(0,3) != "010") ok = false; 
    xmlDoc.setProperty("SelectionNamespaces", "xmlns:sf='xxxxx'");
    ....
    Pouvez vous me venir en aide
    merci
    J'avoue que je ne comprends pas du tout l'intérêt d'un code aussi compliqué.
    que vient faire le load du dom dans un appel ajax ?
    que vient faire le test du navigateur pour trouver la bonne implémentation xmlHttpRequest ?


    si je suis bêtement la doc pour trouver l'implémentation il suffit de tester l'existence de XMLHttpRequest
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var xhttp;
    if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
        } else {
        // code for IE6, IE5
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    la doc de microsoft donne peu ou prou la même chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var xmlHttp = null;
    if (window.XMLHttpRequest) {
      // If IE7, Mozilla, Safari, and so on: Use native object.
      xmlHttp = new XMLHttpRequest();
    } else {
      if (window.ActiveXObject) {
         // ...otherwise, use the ActiveX control for IE5.x and IE6.
         xmlHttp = new ActiveXObject('MSXML2.XMLHTTP.3.0');
      }
    }
    Quant au parsing xml qui suit dans le code là j'avoue que je suis abasourdi.
    Que de chose compliquée pour parser une réponse XHR.

    XMLHttpRequest contient dans son nom XML c'est donc qu'il gère le XML.
    Alors pourquoi récupérer le texte pour ensuite faire tout un bazar pour le parser ?
    Pourquoi ne pas utiliser directement le DOM XML que XMLHttpRequest parse automatiquement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    if (xmlHttp) {
      xmlHttp.open("POST", apiServer, false); 
      xmlHttp.setRequestHeader("Content-Type","text/xml");  
      xmlHttp.setRequestHeader("SOAPaction","create"); 
      xmlHttp.send(create); 
      xmlHttp.onreadystatechange = function() {
        if (http_request.readyState == 4) {// <== réponse complète
          if (http_request.status == 200) {// <== réponse OK
             var xmlDoc = http_request.responseXML; //<== le DOM de la réponse.
             if (xmlDoc.parseError.errorCode != 0) {// <== Parsing KO
               alert(xmlDoc.parseError.reason);
            } else {// <== parsing OK
              //use xml dom 
              var nbrElement = xmlDoc.documentElement.childNodes.length;
            }
          } else {// <== réponse KO
            alert("Error no."+http_request.status+"\nAn error occur while receiving data");
          }
        }
      };
    }
    A+JYT
    PS:
    https://github.com/gtathub/js-soap-client
    http://www.codeproject.com/Articles/...pt-SOAP-Client

  6. #6
    Candidat au Club
    Homme Profil pro
    Superviseur de Hotline
    Inscrit en
    Avril 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Superviseur de Hotline
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    merci à vous deux d'avoir pris le temps de me repondre.
    J'ai essayé vos deux methodes et la console d'erreur s'arrete toujours au même point.
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    var msxml = new XMLHttpRequest();
    msxml.open("POST", apiServer);
    msxml.setRequestHeader("Content-Type", "text/xml");
    msxml.setRequestHeader("SOAPaction", "create");
     msxml.onreadystatechange = function () {
      if (msxml.readyState < 4) return;
      if (msxml.status !== 200) {
        console.log("msxml a retourné un code %d", msxml.status);
        alert("Problème de connexion, veuillez réessayer.");
      } else {
        var xmlDoc = new XMLHttpRequest();
        xmlDoc.open("GET", msxml.responseText);
        xmlDoc.onreadystatechange = function () {
          if (xmlDoc.readyState < 4) return;
          if (xmlDoc.status !== 200) {
            console.log("xmlDoc a retourné un code %d", xmlDoc.status);
            alert("Problème de connexion, veuillez réessayer.");
          } else {
            var text = xmlDoc.reponseText;
            if(text.substring(0,3) != "00a") ok = false; 
     
            // ...
     
          }
        };
        xmlDoc.send();
      }
    };
     
    msxml.send(create);
    }
    Uncaught ReferenceError: create is not defined sur le msxml.send(create);

  7. #7
    Candidat au Club
    Homme Profil pro
    Superviseur de Hotline
    Inscrit en
    Avril 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Superviseur de Hotline
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    au temps pour moi
    merci beaucoup pour votre aide et votre temps

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Compatibilité IE et Chrome
    Par Roxtir dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 31/12/2013, 11h44
  2. Compatibilité Jquery Safari Chrome
    Par cels dans le forum jQuery
    Réponses: 7
    Dernier message: 05/10/2011, 18h48
  3. Compatibilité Safari / Chrome
    Par Fafhrd dans le forum JSF
    Réponses: 9
    Dernier message: 31/05/2010, 13h07
  4. Problème compatibilité Ie8 avec FF et Chrome
    Par solorac dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 11/08/2009, 10h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo