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

  1. #1
    Membre averti
    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 : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Points : 352
    Points
    352
    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
    Points : 91 220
    Points
    91 220
    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().

  3. #3
    Membre averti
    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 : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Points : 352
    Points
    352
    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 expérimenté 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 : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    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 expérimenté 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 : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    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 averti
    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 : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Points : 352
    Points
    352
    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 averti
    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 : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Points : 352
    Points
    352
    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...

  8. #8
    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
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Non, ce n'est pas dû à cela.
    Cependant, je persiste à dire que ta conception est mauvaise.
    Tu ferais mieux de déclencher une fonction de calcul sur les événements resize et scroll...

  9. #9
    Membre averti
    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 : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Points : 352
    Points
    352
    Billets dans le blog
    1
    Par défaut
    déclencher une fonction de calcul :
    du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    si (nom du div)
    {
    vaut 'site' : alors calcul1;
    vaut 'contenairebas' : alors calcul2;
    ...
    }
    ?
    Parce que j'ai bien pensé résoudre mon problème comme cela (si je n'arrive pas à le résoudre avec cette discussion ) mais je perd tous le côté dynamique de la chose, comme le fait de pouvoir rajouter un div par un appel ajax...je serais obligé de rentrer dans le code source pour rajouter le cas : vaut 'bidule': alors calculbidule; .non?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    Je suis d'accord avec Bovino
    Les cas ou eval est incontournable sont très rare. C'est peux être ton cas, mais sans plus de précisions sur ton code , difficile à dire.

    As tu essayé de passer par le constructeur Function ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var x = new Function("type1", "type2", "type3", 
        "return largeurdiv('site')-largeurscrollverti('fondpagegenerale')-largeurbordure('contenairehaut');"
    )();
    Ou plus simplement d'affecter une fonction de calcul en fonction des propriétés de ton objet et de l’appeler le moment venue?

  11. #11
    Membre averti
    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 : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Points : 352
    Points
    352
    Billets dans le blog
    1
    Par défaut
    Non, je n'ai pas essayé avec le constructeur de fonction, je vais essayer.

    Pour mon code, il est trop compliqué pour être montrer comme ça.
    Je suis obligé de passer par un string qu'il me faut ensuite évaluer par n'importe quel moyen.

    Je croise les doigts...

    Merci de ta réponse.

  12. #12
    Membre expérimenté 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 : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par Darkyl Voir le message
    J'y pense, ce ne serait pas à cause des " dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     var x='largeurdiv("site")-largeurscrollverti("fondpagegenerale")-largeurbordure("contenairehaut")';
    divelement.position.left = eval(x);
    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...

    heu dans ton cas ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    divelement.position.left = eval(x);
    reviendras à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    divelement.position.left = largeurdiv("site")-largeurscrollverti("fondpagegenerale")-largeurbordure("contenairehaut");
    donc ce n'est pas une variable site que tu passes à largeurdiv mais un simple string "site".


    edit: il est fort probable que ton problème viennent simplement de là, que tu as mis des ' " ' là où il n'en fallait pas.

    maitenant, pourquoi ça fonctionne sous chrome et firefox ?

    probalement que "site" c'est également l'id d'un de tes éléments du DOM et que firefox et chrome associent des variables javascript à chacun de tes id's de ton DOM.

    edit2: enfin ... rassure-moi tu as bien défini une variable "site" dans ton code javascript..... sinon c'est normal que ça ne fonctionne pas ! xD

    tu dois faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var site = document.getElementById('site');

  13. #13
    Membre averti
    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 : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Points : 352
    Points
    352
    Billets dans le blog
    1
    Par défaut
    Désolé de la réponse tardive.
    J'ai essayé avec la fonction et cela ne marche pas. Faudra que j'approfondisse.

    Non, je n'ai pas déclaré de variable site...
    largeurdiv("site") est censé trouver un objet dans un tableau dont le nom est 'site'.
    Alors je vais expliquer un peu la structure de mon site:

    Quand je veux creer un div, je creais un objet javascript, avec entre autre :
    - elementdiv.nomdiv qui porte le nom du div (son id),
    puis toute une série d'autres propriétés
    Entre autre : elementdiv.position.left ou elementdiv.position.top

    Quand je déclare mon div dans le tableau des div de mon moteur d'affichage, je lui alloue une position, que je veux pouvoir dépendre de certaine chose.
    Par exemple : je veux que le div 'site' soit au milieu de ma page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    elementdiv.position.left = 'largeurfenetre()/2 - largeurdiv("site")/2';
    elementdiv.position.top = 'hauteurfenetre()/2 - hauteurdiv("site")/2';
    Si je veux réactualiser l'affichage, je réevalue ces positions avec les nouvelles données.
    Maintenant, pourquoi stocker cela dans un string ?
    Avec cette methode, avec n'importe quel fichier .php, je peux directement creer un div qui intéragit avec les autres. Pas besoins de rentrer dans une fonction en switch qui en fonction du nom du div lui applique une position.

    Je sais pas si je suis clair .
    Je n'ai pas trouvé d'autres façons de faire cela. Et les possibilités dynamiques sont géniales avec cette méthode (enfin bref je prèche pour ma paroisse).

    Si l'erreur vient des ", par quoi remplacer ? dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var x='largeurdiv("site")-largeurscrollverti("fondpagegenerale")-largeurbordure("contenairehaut")'
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var x="largeurdiv('site')-largeurscrollverti('fondpagegenerale')-largeurbordure('contenairehaut')"
    ?

    Ca ne marche pas... \" non plus...
    J'ai plus d'idée mais IE est bizar quand même.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    je viens de tester ce code sans problème sous ie9
    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
     
           function largeurfenetre()
           {
               return '5p';
           }
           var mapLargeurDiv = {
               site : '10'
           };
           function largeurdiv(key)
           {
               return mapLargeurDiv[key];
           }
           var x;
           eval('x = largeurfenetre()-largeurdiv("site")');
           alert(x);
    Je pense que c'est un problème de nom de variable globale. Sous IE6 , les autres je sais plus, les attributs name et/ou id des éléments HTML son automatiquement référencer en javascript (si j'ai un id = 'mondiv' alors j'aurais une variable globale mondiv)

    As tu fais attention à ca?

  15. #15
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Points : 496
    Points
    496
    Par défaut
    Non non non et triple non et zut de zut de zut !!!

    Alors premièrement et pour mettre fin aux préjugés :
    eval is not evil
    Ca signifie que il ne faut pas bannir eval à tout prix, mais il y a des limites à son utilisation, eval sera surtout utile pour évaluer une chaîne de javascript qui aura été chargé depuis un appel "ajax" (je simplifie la chose). Et encore cette chaîne si c'est du JSON pourra être parsée par JSON.parse (et/ou en utilisant un parseur JSON en JS come JSON2. On ne parlera pas de la méthode intégrée à jquery qui parse par un "New Function()" autoexécuté, mais c'est sexy quand même comme méthode.

    Enfin bref, là sur ce topic, à part pleins de solutions biscornues qui n'ont aucun sens et toutes à bases d'eval, j'ai l'impression que personne n'a cherché à expliquer à notre cher amis que pour transformer une chaine de caractère en nombre il suffisait d'utiliser parseInt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    parseInt(value, base)
    parseInt('234', 10);
    Donc au final ça nous donne (en reprenant le premier morceau de code de Darkyl) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var a=Math.round(parseInt(divelement.position.left,10));
    Darkyl et tous les autres (enfin plus de la moitié du topic), regardez toutes vos solutions complètement tordues à coup d'eval, elles n'ont aucun sens et complexifie encore plus la compréhension.

    En tout cas Darkyl, rien qu'en voyant ton ridicule problème que tu contournes à coup d'"eval", j'ai bien peur que toute la conception de ton site en "ajax" soit à revoir, je dis ça car c'est ma longue expérience de développeur qui a cotoyé tout et n'importe quoi comme autres développeur.

  16. #16
    Membre averti
    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 : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Points : 352
    Points
    352
    Billets dans le blog
    1
    Par défaut
    dukej,

    rassure moi, tu as bien compris mon problème?
    parseInt, je connais mais la chaine de caractère doit contenir que des chiffres, hors moi je veux qu'il évalue la chaine de caractère, car elle peut être une somme de fonction (qui renvoie chacune un int).

    Donc, dans l'ex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    elementdiv.position.left = 'largeurfenetre()/2 - largeurdiv("site")/2';
    elementdiv.position.top = 'hauteurfenetre()/2 - hauteurdiv("site")/2';
    si je fais poxs= parseInt('largeurfenetre()/2 - largeurdiv("site")/2', 10);
    -> a mon avis, cela ne marche pas...
    mais je vais essayer de ce pas, et si ça marche... tu es mon sauveur.

    Je n'ai pas que des chiffres dans mon string.... Sinon, ce serait trop facile.
    J'ai bien compris que l'utilisation de eval est fortement contesté mais je suis obligé d'y passer et toi aussi, ne fait que me prouver qu'il le faut...

    A moins que quelqu'un connaisse une facon d'évaluer 'largeurfenetre()/2 - largeurdiv("site")/2' sans eval

    Concernant mon ridicule problème que je résoud à coup d'éval, je ne referrai pas mon site, ni la conception. Cela fait 6 mois temps plein que j'y bosse, et je l'ai déjà refait entierement plusieurs fois et là, je crois qu'hormis ce problème, il fonctionne bien, je le mettrai en ligne dés que j'aurais un moyen de l'héberger.

    Mais il est trés loin d'être fini.
    Le but de mon site est de faire une application web qui gère un espace membre entièrement modifiable en temps réel sans recharchement de la page, avec ajout d'application (sorte de fiche) et tout le bazar.
    Voulant me réorienter en programmation web, je veux me servir de ce site comme vitrine pour interessé les récruteurs . Je développe donc tout en objet + ajax.

    Voila, je teste ta solution et je reviens

  17. #17
    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
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Oui, je crois que tout le monde a bien compris ton problème. Il n'en reste pas moins vrai que tu t'obstines dans une solution qui est mauvaise !

    Si j'en crois tes noms de fonction, tu cherches juste à centrer des éléments et je ne vois pas en quoi utiliser eval() est justifié comparé à un appel classique de fonction !

    Bref, ce n'est certainement pas avec ce genre de méthode que tu pourras te
    servir de ce site comme vitrine pour interessé les récruteurs
    Bien au contraire !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function centrer(elem){
        return hauteurfenetre()/2 - hauteurdiv(elem)/2;
    }
    var x = centrer(document.getElementById('site'));
    me semble beaucoup plus propre que ta solution !

  18. #18
    Membre averti
    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 : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Points : 352
    Points
    352
    Billets dans le blog
    1
    Par défaut
    dukej solution testée, solution rejeté, me renvoie Nan, évidemment vu que j'ai des fonctions dans ma chaîne de caractère.

    Merci d'avoir essayé.

    Bovino, si je voulais juste centrer un div, j'aurais fait comme tu me dis, évidemment, c'est juste un exemple sur un div donné.

    Maintenant, j'ai des div qui se positionne par rapport à d'autres.
    Du genre, si div plus à gauche que celui étudié alors je décal celui étudié...
    Je peux créer un div à gauche de celui étudié et il me décale ce dernier automatiquement... J'ai dis que je faisais du dynamique, c'est à dire qu'à la conception du site, je ne connais pas la structure de min site, je n'ai pas tous les div etc... Ceux-ci sont rajouter au fur et à mesure que les pages sont chargés, et cela permettra à n'importe qui de rajouter un menu par ex et l'affichage s'actualisera...

    Tu pense que je peux faire ca sans eval?
    Par ex, tu veux creer un div (tu es développeur et tu fais une appli pour mon site, imaginons), il suffit que tu fasse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //       ( nom du div, parent du div,zindex, pos x, pos y, largeur, hauteur)
    rajouteDiv('cache','site',3,true,'absolute','0','hauteurdiv("contenairehaut")','largeurdiv("site")-largeurscrollverti("fondpagegenerale")-largeurbordure("contenairehaut")','80');								
    	creationObjetDiv('cache');
    	refresh_div('cache','site internet/banniere.php',true);
    dans la code de ton appli et un div sera automatiquement créé et placer au bon endroit.

    Aprés, j'explique peut-être trés mal ce que je veux pouvoir faire sur mon site...

  19. #19
    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
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Ben oui... faut adapter, moi je connais ni ton site ni les fonctions appelées !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function centrer(elem){
        return hauteurfenetre()/2 - hauteurdiv(elem)/2;
    }
    var x = centrer('site');

  20. #20
    Membre expérimenté 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 : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    je maintiens que le problème ne vient probablement pas d'eval mais de tes variables probablement non ou mal déclarées.


    peux-tu nous montrer la fonction largeurdiv qui est déclenchée par largeurdiv("site") ? (ou du moins la partie utilisant le string "site" ?)


    edit: et comme le dit bovino, il y a certainement moyen de faire plus propre en proposant de paramètres ou fonctions qui te font tout ça pour tes clients sans qu'il puisse te passer du code à évaluer en paramètre (ce qui peut dans certains cas se montrer extrêmement dangereux pour la sécurité de ton site).

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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