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 :

Problème de reconnaissance javascript vbscript


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 13
    Points
    13
    Par défaut Problème de reconnaissance javascript vbscript
    J'ai un soucis avec l'utilisation de javascript et de vbscript dans une même page.

    En fait, la page en question contient normalement du vbscript. Cependant sur nos serveurs, il a été installé un outil de surveillance / introspection qui ajoute du code javascript à toutes les pages.

    La page s'affiche mais lorsqu'on clique dedans, on a une erreur : "fin d'instruction attendue".
    Apparemment le problème vient de la ligne :
    window.setTimeout('wily_eraseStaleClick();', 500);

    Après plusieurs tests, il s'avère que je n'ai plus d'erreur :
    Si j'enlève tout ce qui correspond au vbscript.
    Si j'enlève le ; dans le paramètre d'appel du settimeout.
    Si je précise lae paramètre d'appel du settimeout avec 'javascript:'wily_eraseStaleClick();'

    Le problème semble donc venir d'une mauvaise reconnaissance du langage de script à utiliser.

    Ma question est donc la suivante : est-il normal qu'il y est un ; dans le paramètre du settimeout ?
    Si oui, y'a-t-il un moyen de spécifier le langage de script par défaut de ma page, ou est-il lié à mon navigateur ?

    Ma page html est en pièce jointe.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    Citation Envoyé par mouste79
    est-il normal qu'il y est un ; dans le paramètre du settimeout ?
    Réponse de normand: oui et non. En Javascript, le premier paramètre de la méthode 'setTimeout' peut-être une expression ou une fonction. Vous utilisez une expression et le ';' marque la fin de l'instruction. Néanmoins comme il n'y a qu'un seul appel de fonction, ce ';' peut-être omis.

    L'appel aurait pu aussi s'écrire (deuxième syntaxe)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    window.setTimeout(wily_eraseStaleClick, 500);
    Citation Envoyé par mouste79
    Si oui, y'a-t-il un moyen de spécifier le langage de script par défaut de ma page, ou est-il lié à mon navigateur ?
    Selon la normalisation HTML 4 du W3C, il est possible de spécifier un langage de script par défaut en inserant la ligne suivante dans la balise HEAD de votre page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <META http-equiv="Content-Script-Type" content="text/javascript">

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par lysandro
    Selon la normalisation HTML 4 du W3C, il est possible de spécifier un langage de script par défaut en inserant la ligne suivante dans la balise HEAD de votre page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <META http-equiv="Content-Script-Type" content="text/javascript">
    J'ai testé cette balise mais apparemment, ça ne résout pas le problème.
    C dommage, cette solution me plaisait bien car elle n'impactait pas le code généré sur lequel je n'ai pas la main.

  4. #4
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    Si je comprend votre problème, vous pensez que l'erreur vient de ce que le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    window.setTimeout('wily_eraseStaleClick();', 500);
    est interprété par le moteur VBScript au lieu du moteur Javascript ?
    Cela va dépendre de l'ordre des scripts dans la page mais vous pouvez essayer de redéfinir la fonction 'setTimeout'.
    Il faut que cette redefinition apparaisse AVANT le code qui pose problème.
    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
     
    // Sauvegarde pour générer l'appel par la suite
    window._setTimeout = window.setTimeout;
    window.setTimeout = function ( expression, msec ) {
      var expe = ( typeof expression == "string" ) ? expression.length : 0;
      // Si c'est une expression non vide
      if ( expe > 0 ) {
        var expp;
        // On élimine tous les ';' à la fin
        for( expp = expe-1; ( expp >= 0 && expression.charAt(expp) == ";" ); expp-- );
        // Et s'il reste quelque chose
        if ( expp > 0 )
          // On appelle la fonction originelle
          window._setTimeout(expression.substring(0,expp+1),msec);
      }
      // Si c'est une fonction, il faut générer l'appel correct
      else if ( typeof expression == "function" ) {
        var args = ["expression","msec"];
        var arge = arguments.length;
        for( var argp = 2; ( argp < arge ); argp++ )
          args[args.length] = "arguments["+argp+"]";
        eval("window._setTimeout("+args.join(",")+")");
      }
    }
    Il faudra peut-être retranscrire le code en VBScript, mais ça ne devrait pas être nécessaire.

  5. #5
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <script language="javascript" type="text/javascript">
       //Ici c'est du JS
    </script>
    <script language="vbscript" type="text/vbscript">
       'Ici c'est du VBS
    </script>
    Néamoins, je te conseille vivement de ne pas utiliser le VBS car seul IE le prend vraiement en charge...
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

Discussions similaires

  1. [Javascript][VBScript]Détection de Fermeture de Fenêtre
    Par JohnBlatt dans le forum Windows
    Réponses: 1
    Dernier message: 24/01/2007, 16h09
  2. [AJAX] Variable javascript
    Par Florent08800 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/07/2006, 11h13
  3. problème de code javascript pour une vue 360°
    Par tomguiss dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/03/2006, 22h50
  4. [FLASH MX2004] Problème de reconnaissance des caractères
    Par Spikefreeman dans le forum Flash
    Réponses: 10
    Dernier message: 04/01/2005, 23h08
  5. ASP,JavaScript,VBScript
    Par Zazeglu dans le forum ASP
    Réponses: 6
    Dernier message: 01/09/2003, 10h56

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