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 :

window.eval et Internet Explorer


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Darkyl
    Homme Profil pro
    autodidacte en recherche d'emploi
    Inscrit en
    Novembre 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : autodidacte en recherche d'emploi

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Billets dans le blog
    1
    Par défaut window.eval et Internet Explorer
    Bonjour,

    Je dévéloppe un site dynamique en combinant javascript et php.

    Toute l'architecture de mon site repose sur l'ajout dynamique de div auquel est rattaché un objet javascript.
    Cet objet a, entre autre, une propriété position et taille qui sont deux objets avec 2 paramètres chacun, au format string.
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     divelement.position.left = '100';
    Il me faut donc faire un eval de tous ca...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var a=Math.round(window.eval(divelement.position.left));
    Marche sous firefox et chrome mais pas bien sous IE...
    Si la chaine de caractère comprend une fonction, il me renvoie NaN...
    Alors que ca marche sous les autres.
    Il faut savoir que la chaine de caractère peut renvoyé à une fonction qui lit elle-même une chaine de caractère avec eval etc...

    J'ai essayé avec ExecScript mais pareil.

    Mon site reposant entièrement sur cet eval, cela m'aiderai beaucoup de résoudre ce problème.

    Si quelqu'un a une idée?

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Manifestement, tu commets des erreurs de conception...

    • Tu ne devrais pas avoir des codes de fonction au format String.
    • Il ne faut pas utiliser eval().
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre éclairé
    Avatar de Darkyl
    Homme Profil pro
    autodidacte en recherche d'emploi
    Inscrit en
    Novembre 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : autodidacte en recherche d'emploi

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Billets dans le blog
    1
    Par défaut
    Heu, il semble que je sois obligé de passer par un eval de string... comment faire autrement?

    Mon but est de stocker une valeur pour la position.left (par ex) qui ne soit pas forcément un int mais une fonction qui renvoie un int...
    par ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var x='largeurdiv("site")-largeurscrollverti("fondpagegenerale")-largeurbordure("contenairehaut")';

    Cet affichage est actualisé à chaque resize du site ou scroll...
    Firefox et chrome marche très bien et c'est mon seul moyen de faire ce que je veux.
    Mais je suis ouvert à toute idée.

  4. #4
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if(typeof window[divelement.position.left] == 'function'){
      // si ta variable est une fonction 
      x = window[divelement.position.left]();
    }
    else if( !isNaN(Number(divelement.position.left)) ){
      // si ta variable est un nombre
      x = Number(divelement.position.left);
    }
    else{
      // sinon utilisation d'eval (par exemple pour une suite d'instructions)
      x = eval(divelement.position.left);
    }

  5. #5
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    Citation Envoyé par Darkyl Voir le message
    Heu, il semble que je sois obligé de passer par un eval de string... comment faire autrement?

    Mon but est de stocker une valeur pour la position.left (par ex) qui ne soit pas forcément un int mais une fonction qui renvoie un int...
    par ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var x='largeurdiv("site")-largeurscrollverti("fondpagegenerale")-largeurbordure("contenairehaut")';

    Cet affichage est actualisé à chaque resize du site ou scroll...
    Firefox et chrome marche très bien et c'est mon seul moyen de faire ce que je veux.
    Mais je suis ouvert à toute idée.
    attention, eval exécute une suite d'instructions et chaque instruction renvoie en général sa valeur, une suite d'instruction renvoie la valeur de la dernière instruction.

    je ne sais pas si cette façon de faire est vraiment conseillée, mais tu peux toujours tenter de faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var x;
    eval('x=largeurdiv("site")-largeurscrollverti("fondpagegenerale")-largeurbordure("contenairehaut")');
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var x = eval('largeurdiv("site")-largeurscrollverti("fondpagegenerale")-largeurbordure("contenairehaut")');
    si aucun des 2 ne fonctionnent, il y a peut-être une autre erreur quelque part dans ton code.

  6. #6
    Membre éclairé
    Avatar de Darkyl
    Homme Profil pro
    autodidacte en recherche d'emploi
    Inscrit en
    Novembre 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : autodidacte en recherche d'emploi

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Billets dans le blog
    1
    Par défaut
    merci de ta réponse.
    Je crois que je fais déjà ce que tu me dis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    code actuel :
    var x='largeurdiv("site")-largeurscrollverti("fondpagegenerale")-largeurbordure("contenairehaut")';
     
    divelement.position.left = eval(x);
    Ta condition qui me renvoie x = eval(divelement.position.left); si divelement.position.left est une suite d'instruction ne marche pas, c'est déjà le probléme que j'ai en fait.

    Si x='100', eval me renvoie bien 100.
    Si x='instruction...', eval me renvoie NaN sous IE et le bon chiffre sous les autres.
    Et j'ai bien mis window.eval donc pas de problème de portée.
    J'ai pas besoins de faire ta condition puisque cela marche si number mais bug si instruction et ta réponse ne résoud pas le problème.

    Le problème apparaissant juste sous IE, il n'y a pas un comportement connu de eval bizar sous IE ?

  7. #7
    Membre éclairé
    Avatar de Darkyl
    Homme Profil pro
    autodidacte en recherche d'emploi
    Inscrit en
    Novembre 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : autodidacte en recherche d'emploi

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Billets dans le blog
    1
    Par défaut
    J'y pense, ce ne serait pas à cause des " dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     var x='largeurdiv("site")-largeurscrollverti("fondpagegenerale")-largeurbordure("contenairehaut")';
    que IE bug (je le sais sensible à ce genre de chose), et donc quand il va évaluer largeurdiv("site"), il ne reconnait pas "site" en tant que 'site', il ne trouve donc pas l'objet javascript dont le nom est 'site' et ne peut donc pas évaluer sa taille.width et la renvoyer à largeurdiv...
    C'est un peu compliquer mais si l'erreur venait de là, comment remplacer les " ?
    dans x='largeurdiv("site")-largeurscrollverti("fondpagegenerale")-largeurbordure("contenairehaut")';

    par \', ne marche pas...

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

Discussions similaires

  1. window.innerHeight avec Internet explorer
    Par Khleo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/12/2009, 18h27
  2. window.print avec internet explorer
    Par bachboucha dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/07/2009, 13h18
  3. Fonction window.open sous Internet Explorer 8
    Par _Dorian_ dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/06/2009, 09h00
  4. Réponses: 100
    Dernier message: 29/06/2009, 15h49
  5. Réponses: 0
    Dernier message: 12/06/2009, 10h06

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