JeuWeb - Crée ton jeu par navigateur
[Article] Javascript non intrusif - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Article] Javascript non intrusif (/showthread.php?tid=2814)



[Article] Javascript non intrusif - z3d - 29-07-2008

Le Javascript non intrusif
(Javascript unobstrusive)
  1. Un peu d'histoire

    Au début de nos conceptions, nous utilisions Javascript tout comme aujourd'hui, mais il est venu le temps où nous devons devenir soucieux des standards du Web lorsque nous conceptualisons un nouveau site.

    De nous jours, et ce qu'il aurait dû être depuis tout temps... Toutes personnes, saines ou handicapées, a le droit de naviguer sur un site Web que ce soit pour se cultiver, se divertir, et ce que tout un chacun peut et a le droit de faire.

    N'oublions pas que nous entrons dans une nouvelle ère, celle du Web 2.0, c'est l'heure du Web Social !

    Aujourd'hui, le pas à franchir en rebute encore plus d'un, cela paraît difficile, cela paraît incompréhensible, cela dit c'est bien loin de toutes ces notions.
    Pour pallier cette difficulté, il faut se rappeler à quoi sert Javascript.

    Le Javascript sert à interagir avec le navigateur quand l'internaute a effectué une action, on dit qu'il déclenche un événement.
    Ainsi, on peut savoir si cet internaute a cliqué sur tel ou tel bouton, tel ou tel lien, on peut connaître les coordonnées de la souris, on peut également faire des contrôles sur les formulaires, etc.
    En ajoutant du Javascript Synchrone ou Asynchrone plus communément appelée AJAX, on peut actualiser une ou toute partie de la page Web.


  2. Javascript, hier !

    Code PHP :
    <?php 
    /**
    * Javascript
    */
    function Hello()
    {
    window.alert('Coucou !');
    }

    /**
    * HTML
    */
    <div id="content">
    <
    h1>Le titre</h1>
    <
    p>
    Le contenu de la page avec plein de blabla...
    // Première méthode
    <a href="javascript:Hello();">Cliquez-moi !</a><br />
    // Deuxième méthode
    <a href="#onclick" onclick="Hello()">Cliquez-moi !</a>
    </
    p>
    </
    div>

    Si vous ne réalisez pas de Javascript non intrusif, utilisez la deuxième méthode.
    Il est plus clair d'utiliser les attributs prévus à cet effet :
    • onclick,
    • onkeypress,
    • onmouseover,
    • etc.


  3. Alors Javascript non intrusif, qu'est ce que c'est ?

    On parle de Javascript non intrusif lorsque le script :
    • est discret pour l'utilisateur,
    • n'est pas essentiel au bon fonctionnement du site,
    • à une implémentation simple; accès aux élément du dom par simple ajout d'id ou de class.

    Comme je dis toujours, on code statique d'abord et on dynamise ensuite !

    Le Javascript non intrusif est dans la continuité de ce qui se fait avec le css, le css sépare la structure de la présentation tout comme le Javascript non intrusif sépare le comportement de la structure.


  4. Dans le vif du sujet
    • Intrusif :
      Code PHP :
      <?php 
      /**
      * Javascript
      */
      function Hello()
      {
      window.alert('Coucou !');
      return
      false;
      }

      /**
      * HTML
      */
      <div id="content">
      <
      h1>Le titre</h1>
      <
      p>
      Le contenu de la page avec plein de blabla...
      <
      a href="#onclick" onclick="Hello()">Cliquez-moi !</a>
      </
      p>
      </
      div>

    • Non Intrusif
      Code PHP :
      <?php 
      /**
      * Javascript
      */
      function Hello()
      {
      // On accède à l'élément a#fcHello
      var oLink = document.getElementById('fcHello');

      // Si le noeud est défini
      if(oLink != undefined) {
      // On ajoute un style
      oLink.style.cursor = 'pointer';
      // On défini l'événement onclick
      oLink.onclick = function() {
      window.alert('Coucou !');
      return
      false;
      };
      }
      }

      /**
      * HTML
      */
      <div id="content">
      <
      h1>Le titre</h1>
      <
      p>
      Le contenu de la page avec plein de blabla...
      <
      a id="fcHello">Cliquez-moi !</a>
      </
      p>
      </
      div>


  5. Poussons plus loin !

    Désactivez Javascript et testez le script précédent, si ce n'ai déjà fait.
    Comme vous le constatez, cliquez sur le lien n'aura aucun effet...
    Alors à quoi bon afficher ce lien ?
    Et comment cacher ce lien si Javascript n'est pas activé ?

    Tout simplement en modifiant la structure de notre page.

    Dans un premier temps, on n'introduit pas le lien dans la structure. Ensuite, on modifie la fonction pour qu'elle accède à l'élément auquel on veut ajouter ce lien. Puis, on crée le lien via Javascript. Enfin, on injecte le lien à l'endroit voulu.

    Code PHP :
    <?php 
    /**
    * Javascript
    */
    function Hello(sName)
    {
    window.alert('Coucou ' + sName + ' !');
    return
    false;
    }

    // Création du texte du lien
    var sText = document.createTextNode('Cliquez-moi !');

    // Création de l'élément a
    var oLink = document.createElement('a');
    // Ajout d'un identifiant à cet élément
    oLink.setAttribute('id', 'fcHello');
    // On injecte le texte dans l'élément a
    oLink.appendChild(sText);
    // On ajoute du style
    oLink.style.cursor = 'pointer';
    oLink.style.textDecoration = 'underline';
    // On attache à l'événement onclick la fonction Hello
    oLink.onclick = function() { Hello('Jean'); };

    // On accède à l'élément div#content
    var oDivision = document.getElementById('content');
    // Si l'élément éxiste
    if(oDivision != undefined) {
    var
    bChild = oDivision.hasChildNodes();
    // Si l'élément possède des enfants
    if(bChild == true) {
    // Récupération de tous les éléments p
    var aParagraph = oDivision.getElementsByTagName('p');
    // Si les éléments sont défini
    if(aParagraph != undefined) {
    var
    iParagraph = aParagraph.length;
    // On parcours le tableau des éléments
    for(var i = 0; i < iParagraph; i++)
    {
    // On insert le lien avant le premier paragraphe et on sort de la boucle
    oDivision.insertBefore(oLink, aParagraph[i]);
    break;
    }
    }
    }
    }

    /**
    * HTML
    */
    <div id="content">
    <
    h1>Le titre</h1>
    <
    p>Le contenu de la page avec plein de blabla...</p>
    </
    div>

    Notez que je n'utilise pas .innerHTML, pour la simple est bonne raison que cette méthode n'est pas standard, elle est la propriété de Microsoft et son implémentation est suceptible de varier d'un navigateur à l'autre (et elle varie...).

    De plus, l'utilisation de cette méthode n'insert pas de nouveau noeud à la structure car c'est une insertion purement littéral.
    De ce fait, tenter de récupérer l'id (fcHello) de l'élément a n'aura aucun effet.
Ceci signe la fin de cet article, j'espère que cette nouvelle méthodologie est devenu claire pour vous, cela ne pourra que ravir vos visiteurs et ceux à venir particulièrement les personnes non capable.

Si toutefois des questions subsistent, je vous invite à les poser dans la section prévue à cet effet.


RE: Javascript non intrusif (javascript unobtrusive) - orditeck - 31-07-2008

L'aide pour ce tutoriel ce trouve à cette adresse :
http://www.jeuweb.org/board/javascript-non-intrusif-javascript-unobtrusive-t-4214.html