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 :

Insertion et activation de liens


Sujet :

JavaScript

  1. #21
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    Je pense que tu n'as pas bien saisi, ceci :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    if (window.ActiveXObject) { /* code ... */ }
    C'est pour IE 6 et inférieur seulement.

    Les autres navigateurs passeront par window.XMLHttpRequest
    Dans le lien que j'ai fourni, ils expliquent clairement comment remédier à cela (correctif). L'autre lien c'est pour comprendre comment réagissent IE 7 et IE 8 avec les histoires de sécurité IE (cross domain, etc).

    Pour faire simple et réducteur, tu as deux choses :
    - un fichier XML dans un de tes répertoires
    - ton script qui tente d'appeler ce fichier XML

    IE 7 ou 8 compare la provenance de ton script et ton ton XML. S'il détecte que les deux n'appartiennent pas au même domaine, il arrêtera l'exécution. C'est ce qui se passe dans ton cas, et c'est une erreur qui a été corrigée par la suite par Microsoft.

    Tu as essayé de mettre le chemin d'accès complet ?
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // charge le xml et le met dans xmlDoc
    xmlDoc=loadXMLDoc("file:///C:/TonCheminAcces/fichierconf.xml");

    Quoiqu'il en soit, si tu passes par un serveur (Apache, IIS, etc) il n'y aura pas de problème.

    Sinon, passe directement le fichier XML au format chaine de caractère et c'est réglé, plus de problème de lecture fichier :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if ( window.DOMParser ) {
      try {
        var fluxXML = '<racine><pages><page1><nom>aaa</nom><lien>http://monlien1</lien><seconde>1000</seconde></page1></pages></racine>';
        var docXML =  new DOMParser().parseFromString(fluxXML, "text/xml");
     
        // Détection si il y a des erreurs de parse (ne génère pas d'exception sinon)
        if (docXML.getElementsByTagName('parsererror').length > 0)
          throw "Erreur lors du chargement du flux XML : " + this.docXML.getElementsByTagName('parsererror')[0].textContent;
     
      } catch(ex) {
        alert(ex);
      }
    } else
      alert('Impossible de charger le XML');

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

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    je n'ai jamais compris l'utilité de file://
    c'est toujours source de pb et d'erreur et de toute façon au final ce n'est pas ains qu'on utilise sont navigateur.

    Je me souvien d'un fournisseur à qui on a commendé un site Dynamique en php pour un serveur Apache sous Solaris. le truc ne fonctionnait absolument pas.

    le commercial n'arrêtait pas de dire chez-moi ça marche.
    Je ne sais pas comment chez lui ça pouvais marcher tous les fichiers contenaient des liens file:// avec des chemins en basolut à la windows
    file://c|truc\machin\fichier.php
    à moins d'embarquer un interprète php dans son navigateur...

    Bref
    chez moi le protocole file:// est bani Il est interdit de l'utiliser. même pour une maquette des plus simple on passe par un serveur apache.
    ça s'installe en 3'
    et vu qu'aujourd'hui quasiment tout les site utilise XHR les problème de Xdomain sont reméré dès le début.

    A+JYT

  3. #23
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 24
    Par défaut
    Bonjour,

    j'ai donc mis mon xml en dur(si on peux dire sa comme sa), directement dans mon Script, et je l'ai parser:

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // je stock mon XML dans fluxXML
    var fluxXML = '<racine><pages><page1><nom>Supervision Base de Donnée</nom><lien>http://</lien><seconde>5000</seconde></page1><page2><nom>Tete</nom><lien>http://</lien><seconde>20000</seconde></page2><page3><nom>Supervision</nom><lien>http://</lien><seconde>5000</seconde></page3><page><nom>Diskgroup</nom><lien>http://</lien><seconde>5000</seconde></page4><page5><nom>Supervisio</nom><lien>http://</lien><seconde>5000</seconde></page5><page6><nom>Supervision </nom><lien>http://</lien><seconde>5000</seconde></page6></pages></racine>';
     
    // je parse
    var xmlDoc =  new DOMParser().parseFromString(fluxXML, "text/xml");
     
     
    // stock pages dans lespages
    var lespages = xmlDoc.getElementsByTagName("pages");
     
    // compte le nombre de noeud 
    var nombre = (lespages[0].children.length);

    Tout simplement, avec deux variable au lieu d'une fonction qui récupere le XML ect...

    Cela marche...sur fox, mais toujours pas sur IE8 je ne comprend pas, je sais plus quoi tenter...j'ai activer l'option "enable native XMLHTTP support", j'ai ensuite désactiver...rien n'y fait ...

    Sous IE le
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( window.DOMParser )
    ne passait pas et me renvoyais toujours dans le
    Code javascipt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    else
      alert('Impossible de charger le XML');

  4. #24
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    D'où le bloc try { } catch() !!! C'est vrai, j'avais oublié que DOMParser était absent chez lui.

    Solution de secours donc :
    Code javascript : 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
    try {
      var fluxXML = '<racine><pages><page1><nom>aaa</nom><lien>http://monlien1</lien><seconde>1000</seconde></page1></pages></racine>';
      if ( window.DOMParser )
        var docXML =  new DOMParser().parseFromString(fluxXML, "text/xml");
      else { // IE ...
        var docXML = new ActiveXObject('Microsoft.XMLDOM');
        docXML.async = false;
        docXML.loadXML(fluxXML);
      }
     
      // Détection si il y a des erreurs de parse (ne génère pas d'exception sinon)
      if (docXML.getElementsByTagName('parsererror').length > 0)
        throw "Erreur lors du chargement du flux XML : " + this.docXML.getElementsByTagName('parsererror')[0].textContent;
     
    } catch(ex) {
      alert(ex);
    }

  5. #25
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 24
    Par défaut
    TypeError: 'str' is not defined

    A quoi correspond ce 'str' dans le code ? c'est le nom de la variable qui devrais contenir le XML ?

  6. #26
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    c'est un copié/collé trop rapide. str correspond à la String qui contient le flux XML Donc fluxXML oui

  7. #27
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 24
    Par défaut
    Sous fox sa marche toujours bien, sous Ie sa passe bien dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    else { // IE ...
        var docXML = new ActiveXObject('Microsoft.XMLDOM');
        docXML.async = false;
        docXML.loadXML(fluxXML);
    	alert(fluxXML);
      }
    J'ai vérifier avec un alert, IE trouve le XML correctement...cependant il n'execute pas l'affichage ect..c'est un casse tete ... sa ne marche pas alors qu'aucune erreur n'est déclarer et que le flux passe...

    Merci pour ton aide en tout cas

  8. #28
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    Quel affichage ?? Ce script a pour but de transformer une chaine de caractère en document XML.
    Fait un console.log(docXML) et tu verras que tu auras bien un document XML. Ensuite tu n'as plus qu'à jouer avec

  9. #29
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 24
    Par défaut
    Oui, mais le XML me sert comme "Base de donnée" contenant des liens, que j'affiche avec une fonction affichage ( c'est de sa que je parlais).

    Et firefox joue bien le jeux en affichant mes pages (<liens>) pendant X <secondes> et passe a la suivante, en boucle...

    Mais IE malgré nos modifications qui contourne les problèmes de microsoft en mettant le XML en "texte" dans le document, IE8 n'execute toujours pas l'affichage de ces pages.

  10. #30
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    Donc ça c'est un autre problème ! Comment tu affiches le contenu du lien X dans la div ?

  11. #31
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 24
    Par défaut
    Fonction pour charge le XML dans un tableau:
    Code javascript : 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
    // stock pages dans lespages
    var lespages = docXML.getElementsByTagName("pages");
     
    // compte le nombre de noeud 
    var nombre = (lespages[0].children.length); 
     
    // tableau  de 6 lignes (nombre)
    var MonTab = new Array (); 
     
    // compteur des affichages
    var compteur = nombre-1;
     
     
     
     
     
    function load()
    {
     
    	//On boucle et récupere les informations de chaques pages...	
    		for (i=0; i<nombre; i++)
     
    			{
     
     
    					//...dans ces variables
    					var nom=lespages[0].getElementsByTagName("nom")[i].firstChild.nodeValue;
    					var seconde=lespages[0].getElementsByTagName("seconde")[i].firstChild.nodeValue;
    					var lien=lespages[0].getElementsByTagName("lien")[i].firstChild.nodeValue;		
     
    					//Initialisation du tableau pour stocker les valeurs du XML...
    					var tabTemp=new Array(nom, seconde, lien); 				
     
    					//Puis on remplit le tableau à chaques passages de la boucle
    					MonTab[i]= tabTemp;					
     
     
     
     
    			} 
     
    	//On appelle la fonction pour afficher les pages
    	affichage();
     
    }




    Pour afficher:
    Code javascript : 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
    function affichage()
    {
     
     
       	//Remplace src"" du Iframe CONTENEUR par le lien récuperer dans le fluxXML
    	document.getElementById('conteneur').src=(MonTab[compteur][2]);
     
    	//On attribut un délai entre chaque switch de page selon (Seconde, du fluxXML)
    	setTimeout(affichage, MonTab[compteur][1]); 
     
        //On décremente
    	compteur--;
     
    	//Si compteur = -1 on réinitialise le compteur a 5;
    	if(compteur == -1 ){
    				compteur = nombre-1;   
    					   }
     
    }
     
     
    </script>
     
     
    <div class="fullscreen">
    	<!-- Notre conteneur pour afficher les pages-->
    	<iframe id='conteneur' iframe align="" width="100%" height="100%" frameborder="1" scrolling="auto" src="" name="iframe"></iframe>
     
    </div>


    Et comme dit précedement cela marche parfaitement sur Firefox...

  12. #32
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    Plusieurs points :
    - Ton XML n'est pas bien structuré. Au lieu de <racine><pages><page1>...</page1><page2>...</page2>...</pages></racine> tu devrais plutôt avoir un flux de ce genre : <racine><pages><page>...</page><page>...</page>...</pages></racine>Si tu veux avoir un "id" pour chaque page, alors passe le en attribut de la balise.
    ==> Ainsi, tu parviendras mieux à lire le flux XML, ça sera moins brouillon que ta "soupe" actuelle

    - Renommer tes balises pour la compréhension. Je pense à seconde qui devrait se nommer millisecondes.

    - Pour la lisibilité, je pense qu'il est mieux de faire un tableau d'Objets et non un tableau de tableau pour stocker les données du flux XML.

    Bon ok, je chipote sur certains points, mais autant faire ça proprement ne serait-ce que pour la maintenabilité et la lisbilité quand tu repasseras dessus dans 10 ans

    Voilà un ptit truc, j'ai testé jusqu'à IE 7, ça semble fonctionner. Si tu as des questions, n'hésite pas
    (pour les besoins de la démo, j'ai fait ma propre structure HTML, mais je te laisse adapter tout ça au tien)

    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <!DOCTYPE html>
    <html>
      <head>
        <title>Test lien</title>
        <script>
          var docXML = null,
              pages  = [],
              cpt_sequence = 0;
     
          function loadFlux() {
            try {
              var fluxXML = '<racine><pages><page><nom>DVP</nom><url>http://developpez.com/</url><ms>5000</ms></page><page><nom>Wiki</nom><url>http://wikipedia.org</url><ms>5000</ms></page></pages></racine>',
                  detailInfos = '', classInfos = '';
     
              if ( window.DOMParser )
                docXML =  new DOMParser().parseFromString(fluxXML, "text/xml");
              else { // IE ...
                docXML = new ActiveXObject('Microsoft.XMLDOM');
                docXML.async = false;
                docXML.loadXML(fluxXML);
              }
     
              // Détection si il y a des erreurs de parse (ne génère pas d'exception sinon)
              if (docXML.getElementsByTagName('parsererror').length > 0)
                throw "Erreur lors du chargement du flux XML : " + this.docXML.getElementsByTagName('parsererror')[0].textContent;
     
              // Traitement document
              for (var i = 0, page; (page = docXML.getElementsByTagName("page")[i]) != undefined; i++)
                pages.push({
                  nom: page.getElementsByTagName("nom")[0].firstChild.nodeValue,
                  url: page.getElementsByTagName("url")[0].firstChild.nodeValue,
                  ms: page.getElementsByTagName("ms")[0].firstChild.nodeValue
                });
     
              // Résultats
              detailInfos = 'Document XML traité avec succès';
              classInfos  = 'ok';
     
            } catch(ex) {
              detailInfos = ex;
              classInfos  = 'erreur';
            } finally {
              document.getElementById('conteneur-infos').innerHTML = detailInfos;
              document.getElementById('conteneur-infos').className = classInfos;
     
              if (classInfos == 'ok')
                traiterSequence();
            }
          }
     
          function traiterSequence() {
            document.getElementById('resultat').src               = pages[cpt_sequence].url;
            document.getElementById('conteneur-infos').innerHTML += "<br><b>" + pages[cpt_sequence].nom + "</b> ["+ pages[cpt_sequence].url +"] s'affiche pendant " + (pages[cpt_sequence].ms/1000) + " sec";
     
            setTimeout(traiterSequence, pages[cpt_sequence].ms);
            cpt_sequence = (cpt_sequence == pages.length - 1) ? 0 : (cpt_sequence + 1);
          }
        </script>
        <style>
          div { width:500px; }
          div#conteneur-infos { min-height: 35px; background:#eee; border: 1px solid #000; }
          iframe#resultat { width:500px; min-height: 235px; }
          .erreur { color: #f00; }
          .ok { color: #00f; }
        </style>
      </head>
      <body onload="loadFlux()">
        <h1>Infos :</h1>
        <div id="conteneur-infos"></div>
     
        <h1>Résultats</h1>
        <div id="conteneur-resultats">
          <iframe id="resultat" scrolling="auto" src="" name="iframe"></iframe>
        </div>
      </body>
    </html>

  13. #33
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 24
    Par défaut
    Sa marche niquel, merci bien pour ton temps accordé !!

    Pourquoi sa marchais pas avant je ne sais toujours pas xD

    Merci encore

  14. #34
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    Sûrement à cause de ta déclaration de <iframe>Elle n'était pas très réglementaire

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. activer/desactiver lien href
    Par soiz775 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/04/2009, 18h15
  2. Activer un lien hypertexte dans un contrôle
    Par mawelle dans le forum IHM
    Réponses: 2
    Dernier message: 04/05/2008, 15h46
  3. Scroll bar qui active des lien lorsqu'on l'utilise
    Par pierrax dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/02/2008, 19h35
  4. Activer un lien en Javascript
    Par belocom dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/12/2007, 19h12
  5. [Système] Activer 2 liens quand une vidéo se termine
    Par roseline43 dans le forum Langage
    Réponses: 1
    Dernier message: 23/08/2007, 23h57

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