11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J'aurai besoin d'une balise <script> que je doit modifier selon les entrées des utilisateurs.
J'ai essayé avec cette exemple pour tester:

var head1 = document.getElementsByTagName("head")[0];         
var Script1 = document.createElement('script');	
Script1.type = 'text/javascript';
//Script1.src = 'CodeJS/conversion-distance/conversion-distance.js';
//Script1.innerHTML = 'function fvar(x) {return(5*x);}' ;
Script1.textContent = 'function fvar(x) {return(5*x);}' ;
head1.appendChild(Script1);
alert(fvar(5));
Script1.textContent = 'function fvar(x) {return(10*x);}' ;		
alert(fvar(5));


Le problème, c'est que la modification du contenu de Script1 n'est pas pris en compte, c'est la premier contenu qui est utilisé. Est ce qu'il y a moyen de mettre à jour le contenu de l'élément Script ?.
J'ai essayé aussi avec la suppression et l'ajout d'un node, mais I.E n'est pas à l'aise avec appendchild..

C'est quoi la meilleur façon de procéder à votre avis

Merci d'avance
Wow... Explique ce que tu essaie réellement de faire. Ton bout de code ne fait aucun sens Smiley smile (et la logique que tu essaie d'exploiter me semble à éviter)
Salut,
En faite l'idée, est de calculer f(x) avec f est la fonction que va entrer l'utilisateur;
ça va pas être facile, le 2ème problème à résoudre sera d'analyser la chaine de texte qui correspond à la fonction; cos, sin, ... Smiley cligne
Salut les amis,

Ce que je cherche à faire ressemble au calculatrice scientifique;

Par exemple, l'utilisateur va taper: x= 2; f(x)= cos(x^2)+log(x)
et moi je dois analyser la chaine " cos(x^2)+log(x) "
pour calculer f(2);...

Le 2ème problème à régler, est de trouver le meilleur algo pour vérifier la chaine entrée par l'utilisateur. ça fera l'objet de mon prochain sujet.;)

Je suis d'accord que ça ressemble à l'utilisation de eval();

Mais, tout de même, ça m'énerve ne pas comprendre pourquoi le navigateur ne met pas à jour l'élément script après changement. Pour la solution avec appendchild, sous internet explorer ça bug ..
Modifié par yassinbean (30 Jun 2013 - 18:26)
Le navigateur ne met pas à jour le script parce que la VM JavaScript ne va pas re-parser le contenu d'une balise script.

Dans ton cas, `eval` est la solution, tu veux parser un code fournit par l'utilisateur, il n'y a donc aucun avantage à procéder autrement (et les autres solutions ne seront pas plus sécuritaires).

Si tu as des milliers d'heures devant toi cela dit, il y a une autre solution qui consisterait à construire un AST du code, le parser, le valider et reproduire les étapes du code avec des fonctions prédéfinies (add, cos, etc) dans ton environnement contrôlé. Là, tu aurais une solution "sécuritaire".

Un article sur `eval`, "eval() isn’t evil, just misunderstood" : http://www.nczonline.net/blog/2013/06/25/eval-isnt-evil-just-misunderstood/