Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Bonjour !
Je débute en javascript, d'où ma question peut-être simpliste ; excusez-moi
d'avance.
Voilà : j'utilise des pages .HTA, avec des scripts jscript, comme GUI pour
des applications d'arrière-plan. Mais je fais des pages localement
dynamiques ; c'est à dire que leur contenu se modifie en fonction du
déroulement du logiciel. Par exemple, la saisie d'un élément fait apparaître
un nouveau bouton, permettant de le modifier, ou des champs supplémentaires.
Mon problème vient lorsque je veux modifier le code adressé par le bouton
(typiquement, une fonction). Où que je mette la fonction (dans le <HEAD>,
dans un <DIV>, dans un <SPAN>, dans un fichier .JS externe, etc.) je réussi
bien la modification, je peux bien vérifier que le nouveau contenu est bien
en place, mais c'est quand même toujours l'ancienne version de la fonction
qui est appelée par JScript, alors qu'elle n'est plus dans la page !
Et je ne peux pas faire un rechargement de la page, car je perdrais toutes
les évolutions intermédiaires.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
ASM
c'est quand même toujours l'ancienne version de la fonction qui est appelée par JScript, alors qu'elle n'est plus dans la page !
Tiens ça c'est curieux ...
Rien ne se crée, rien ne se perd, tout se transforme
La fonction existe et ne disparait pas (sans rechargement d'autre chose)
Si elle doit être modifiée suite à modification par elle effectuée elle n'a qu'à avoir ce qu'il faut pour se modifier elle-même (ou prévoir une autre fonction pour le faire)
c'est quand même toujours l'ancienne version de la fonction
qui est appelée par JScript, alors qu'elle n'est plus dans la page !
Tiens ça c'est curieux ...
Rien ne se crée, rien ne se perd, tout se transforme
La fonction existe et ne disparait pas (sans rechargement d'autre chose)
Si elle doit être modifiée suite à modification par elle effectuée
elle n'a qu'à avoir ce qu'il faut pour se modifier elle-même
(ou prévoir une autre fonction pour le faire)
c'est quand même toujours l'ancienne version de la fonction qui est appelée par JScript, alors qu'elle n'est plus dans la page !
Tiens ça c'est curieux ...
Rien ne se crée, rien ne se perd, tout se transforme
La fonction existe et ne disparait pas (sans rechargement d'autre chose)
Si elle doit être modifiée suite à modification par elle effectuée elle n'a qu'à avoir ce qu'il faut pour se modifier elle-même (ou prévoir une autre fonction pour le faire)
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Bonsoir !
La fonction existe et ne disparaît pas (sans rechargement d'autre chose)
Justement, comment forcer le "rechargement" d'une fonction ?
En fait, j'arrive facilement à mes fins, en passant par des "eval" ; mais c'est peu satisfaisant pour l'esprit.
Au cours de mes essais, j'ai réussi à induire des changements, à condition de ne pas avoir utilisé la fonction auparavant. Dès qu'elle est utilisée, une fonction se comporte comme si elle avait été "ROMisée". J'ai voulu essayer, aussi, de tromper le système, en utilisant des objets intermédiaires (comme des pointeurs sur les fonctions). Mais il faudrait que je change de nom d'objet à chaque appel de la fonction, ce qui devient vite lourd.
Et puis, comme je l'ai dit, je débute en javascript ; alors je cherche un peu mes marques.
Bonne soirée. -- Michel Claveau
Bonsoir !
La fonction existe et ne disparaît pas (sans rechargement d'autre chose)
Justement, comment forcer le "rechargement" d'une fonction ?
En fait, j'arrive facilement à mes fins, en passant par des "eval" ; mais
c'est peu satisfaisant pour l'esprit.
Au cours de mes essais, j'ai réussi à induire des changements, à condition
de ne pas avoir utilisé la fonction auparavant. Dès qu'elle est utilisée,
une fonction se comporte comme si elle avait été "ROMisée".
J'ai voulu essayer, aussi, de tromper le système, en utilisant des objets
intermédiaires (comme des pointeurs sur les fonctions). Mais il faudrait que
je change de nom d'objet à chaque appel de la fonction, ce qui devient vite
lourd.
Et puis, comme je l'ai dit, je débute en javascript ; alors je cherche un
peu mes marques.
La fonction existe et ne disparaît pas (sans rechargement d'autre chose)
Justement, comment forcer le "rechargement" d'une fonction ?
En fait, j'arrive facilement à mes fins, en passant par des "eval" ; mais c'est peu satisfaisant pour l'esprit.
Au cours de mes essais, j'ai réussi à induire des changements, à condition de ne pas avoir utilisé la fonction auparavant. Dès qu'elle est utilisée, une fonction se comporte comme si elle avait été "ROMisée". J'ai voulu essayer, aussi, de tromper le système, en utilisant des objets intermédiaires (comme des pointeurs sur les fonctions). Mais il faudrait que je change de nom d'objet à chaque appel de la fonction, ce qui devient vite lourd.
Et puis, comme je l'ai dit, je débute en javascript ; alors je cherche un peu mes marques.
Bonne soirée. -- Michel Claveau
YD
La fonction existe et ne disparaît pas (sans rechargement d'autre chose)
Justement, comment forcer le "rechargement" d'une fonction ?
En la redéfinissant ! Supposons une fonction f() définie, si je veux modifier son code je peux écrire : f= function(arg1, arg2...){ // le nouveau code } Une fonction est une variable javascript, comme une autre de type objet.
Il existe une autre syntaxe, identique dans ses effets : f = new Function("arg1", "arg2", "[code de la fonction sans les accolades]"); // arg1, arg2, etc. facultatifs
L'avantage de cette deuxième syntaxe est qu'on peut définir le code dans des chaînes et l'affecter au moment voulu. Un peu obscur, alors un exemple à coller dans le body d'une page HTML :
<pre> <script type="text/javascript">
var code= Array("return x+y;", "return x*y;", "return x-y;", "return y==0?NaN:x/y"); var f; //sera la fonction modifiée
En fait, j'arrive facilement à mes fins, en passant par des "eval" ; mais c'est peu satisfaisant pour l'esprit.
C'est un des cas d'utilisation possible de eval.
Au cours de mes essais, j'ai réussi à induire des changements, à condition de ne pas avoir utilisé la fonction auparavant. [...]
Si tu étais plus concret (exemple simple de code avnt le onclick puis celui souhaité, et code du onclick surtout), tu aurais davantage de chance d'être aidé.
-- Y.D.
La fonction existe et ne disparaît pas (sans rechargement d'autre chose)
Justement, comment forcer le "rechargement" d'une fonction ?
En la redéfinissant ! Supposons une fonction f() définie, si je veux modifier son code je peux écrire :
f= function(arg1, arg2...){
// le nouveau code
}
Une fonction est une variable javascript, comme une autre de type objet.
Il existe une autre syntaxe, identique dans ses effets :
f = new Function("arg1", "arg2", "[code de la fonction sans les accolades]"); // arg1, arg2, etc. facultatifs
L'avantage de cette deuxième syntaxe est qu'on peut définir le code dans des chaînes et l'affecter au moment voulu. Un peu obscur, alors un exemple à coller dans le body d'une page HTML :
<pre>
<script type="text/javascript">
var code= Array("return x+y;",
"return x*y;",
"return x-y;",
"return y==0?NaN:x/y");
var f; //sera la fonction modifiée
En fait, j'arrive facilement à mes fins, en passant par des "eval" ; mais
c'est peu satisfaisant pour l'esprit.
C'est un des cas d'utilisation possible de eval.
Au cours de mes essais, j'ai réussi à induire des changements, à condition
de ne pas avoir utilisé la fonction auparavant. [...]
Si tu étais plus concret (exemple simple de code avnt le onclick puis celui
souhaité, et code du onclick surtout), tu aurais davantage de chance d'être aidé.
La fonction existe et ne disparaît pas (sans rechargement d'autre chose)
Justement, comment forcer le "rechargement" d'une fonction ?
En la redéfinissant ! Supposons une fonction f() définie, si je veux modifier son code je peux écrire : f= function(arg1, arg2...){ // le nouveau code } Une fonction est une variable javascript, comme une autre de type objet.
Il existe une autre syntaxe, identique dans ses effets : f = new Function("arg1", "arg2", "[code de la fonction sans les accolades]"); // arg1, arg2, etc. facultatifs
L'avantage de cette deuxième syntaxe est qu'on peut définir le code dans des chaînes et l'affecter au moment voulu. Un peu obscur, alors un exemple à coller dans le body d'une page HTML :
<pre> <script type="text/javascript">
var code= Array("return x+y;", "return x*y;", "return x-y;", "return y==0?NaN:x/y"); var f; //sera la fonction modifiée
En fait, j'arrive facilement à mes fins, en passant par des "eval" ; mais c'est peu satisfaisant pour l'esprit.
C'est un des cas d'utilisation possible de eval.
Au cours de mes essais, j'ai réussi à induire des changements, à condition de ne pas avoir utilisé la fonction auparavant. [...]
Si tu étais plus concret (exemple simple de code avnt le onclick puis celui souhaité, et code du onclick surtout), tu aurais davantage de chance d'être aidé.
-- Y.D.
ASM
Bonsoir !
La fonction existe et ne disparaît pas (sans rechargement d'autre chose)
Justement, comment forcer le "rechargement" d'une fonction ?
Ou on ne parle pas de la même chose, ou on ne parle pas de la même chose ?
On appelle une fonction pour qu'elle fasse un truc-bazard Normalement on a prévu de lui attribuer des arguments au prochain coup, si on veut qu'elle fasse autre chose quand on la rappelle, on change les arguments, et elle fait son truc-bazard sur autre chose, ou autrement si les arguments agissent sur le truc-bazard. (elle ne saura faire que le truc-bazard qu'on lui aura expliqué)
<html> <script type="text/javascript"><!--
function dc(text) { document.write(text); }
function al(y) { alert(y); window.status=y; } function ec(y) { dc(y); al(y); }
// le "rechargement" se fait par la modif // de l'argument "text" "y" ou "x" introduit dans la fonction dc('<h1>Dis bonjour'); dc('<br>a la dame'+'<'+'/h1>'); dc('<p>'); ec('coucou');
// --></script> <h3>emploi d'1 meme fonction pour des resultats differents</h3> <p><input type=button value="test1" onclick="ed('avant-dernier ','affichage');"> <div id="affichage"></div> <p><input type=button value="test2" onclick="ed('der de der');"> </html>
Je peux bien réemployer mes fonctions et même à l'intérieur d'autres fonctions autant de fois que je veux (c'est pour ça que ça a été inventé)
En fait, j'arrive facilement à mes fins, en passant par des "eval" ; mais c'est peu satisfaisant pour l'esprit.
Le passage de noms ou ids d'éléments en arguments doivent être encadrés par des ' (voir l'exemple + haut pour affichage)
Au cours de mes essais, j'ai réussi à induire des changements, à condition de ne pas avoir utilisé la fonction auparavant. Dès qu'elle est utilisée, une fonction se comporte comme si elle avait été "ROMisée".
Je ne comprends pas ce que tu me dis (à vue de nez ça renifle l'Internet Explorer)
d'ailleurs tu parlais de *.hta ... ça, je ne pratique pas :(
Perso, je ne peux parler que de fonctions JS pour le navigateur.
Peut-être veux-tu trop compliquer du 1er coup ? (ces histoires d'eval ne m'augurent pas trop)
J'ai voulu essayer, aussi, de tromper le système, en utilisant des objets intermédiaires (comme des pointeurs sur les fonctions). Mais il faudrait que je change de nom d'objet à chaque appel de la fonction, ce qui devient vite lourd.
oui, s'il faut changer à chaque appel, ou se réferer à tt un tas de pointeurs pas top!
Et puis, comme je l'ai dit, je débute en javascript ; alors je cherche un peu mes marques.
J'ai un peu l'impression que si tu débutes, tu débutes fort.
Néanmoins sans quelques exemples de code, pas bp d'aide pourra t'être apportée.
La fonction existe et ne disparaît pas (sans rechargement d'autre chose)
Justement, comment forcer le "rechargement" d'une fonction ?
Ou on ne parle pas de la même chose, ou on ne parle pas de la même chose ?
On appelle une fonction pour qu'elle fasse un truc-bazard
Normalement on a prévu de lui attribuer des arguments
au prochain coup, si on veut qu'elle fasse autre chose
quand on la rappelle, on change les arguments, et elle fait son truc-bazard
sur autre chose, ou autrement si les arguments agissent sur le truc-bazard.
(elle ne saura faire que le truc-bazard qu'on lui aura expliqué)
<html>
<script type="text/javascript"><!--
function dc(text) { document.write(text); }
function al(y) { alert(y); window.status=y; }
function ec(y) { dc(y); al(y); }
// le "rechargement" se fait par la modif
// de l'argument "text" "y" ou "x" introduit dans la fonction
dc('<h1>Dis bonjour');
dc('<br>a la dame'+'<'+'/h1>');
dc('<p>'); ec('coucou');
// --></script>
<h3>emploi d'1 meme fonction pour des resultats differents</h3>
<p><input type=button value="test1" onclick="ed('avant-dernier ','affichage');">
<div id="affichage"></div>
<p><input type=button value="test2" onclick="ed('der de der');">
</html>
Je peux bien réemployer mes fonctions et même à l'intérieur d'autres fonctions
autant de fois que je veux (c'est pour ça que ça a été inventé)
En fait, j'arrive facilement à mes fins, en passant par des "eval" ; mais
c'est peu satisfaisant pour l'esprit.
Le passage de noms ou ids d'éléments en arguments doivent être
encadrés par des '
(voir l'exemple + haut pour affichage)
Au cours de mes essais, j'ai réussi à induire des changements, à condition
de ne pas avoir utilisé la fonction auparavant. Dès qu'elle est utilisée,
une fonction se comporte comme si elle avait été "ROMisée".
Je ne comprends pas ce que tu me dis
(à vue de nez ça renifle l'Internet Explorer)
d'ailleurs tu parlais de *.hta ...
ça, je ne pratique pas :(
Perso, je ne peux parler que de fonctions JS pour le navigateur.
Peut-être veux-tu trop compliquer du 1er coup ?
(ces histoires d'eval ne m'augurent pas trop)
J'ai voulu essayer, aussi, de tromper le système, en utilisant des objets
intermédiaires (comme des pointeurs sur les fonctions). Mais il faudrait que
je change de nom d'objet à chaque appel de la fonction, ce qui devient vite
lourd.
oui, s'il faut changer à chaque appel, ou se réferer à tt un tas de pointeurs
pas top!
Et puis, comme je l'ai dit, je débute en javascript ; alors je cherche un
peu mes marques.
J'ai un peu l'impression que si tu débutes, tu débutes fort.
Néanmoins sans quelques exemples de code,
pas bp d'aide pourra t'être apportée.
La fonction existe et ne disparaît pas (sans rechargement d'autre chose)
Justement, comment forcer le "rechargement" d'une fonction ?
Ou on ne parle pas de la même chose, ou on ne parle pas de la même chose ?
On appelle une fonction pour qu'elle fasse un truc-bazard Normalement on a prévu de lui attribuer des arguments au prochain coup, si on veut qu'elle fasse autre chose quand on la rappelle, on change les arguments, et elle fait son truc-bazard sur autre chose, ou autrement si les arguments agissent sur le truc-bazard. (elle ne saura faire que le truc-bazard qu'on lui aura expliqué)
<html> <script type="text/javascript"><!--
function dc(text) { document.write(text); }
function al(y) { alert(y); window.status=y; } function ec(y) { dc(y); al(y); }
// le "rechargement" se fait par la modif // de l'argument "text" "y" ou "x" introduit dans la fonction dc('<h1>Dis bonjour'); dc('<br>a la dame'+'<'+'/h1>'); dc('<p>'); ec('coucou');
// --></script> <h3>emploi d'1 meme fonction pour des resultats differents</h3> <p><input type=button value="test1" onclick="ed('avant-dernier ','affichage');"> <div id="affichage"></div> <p><input type=button value="test2" onclick="ed('der de der');"> </html>
Je peux bien réemployer mes fonctions et même à l'intérieur d'autres fonctions autant de fois que je veux (c'est pour ça que ça a été inventé)
En fait, j'arrive facilement à mes fins, en passant par des "eval" ; mais c'est peu satisfaisant pour l'esprit.
Le passage de noms ou ids d'éléments en arguments doivent être encadrés par des ' (voir l'exemple + haut pour affichage)
Au cours de mes essais, j'ai réussi à induire des changements, à condition de ne pas avoir utilisé la fonction auparavant. Dès qu'elle est utilisée, une fonction se comporte comme si elle avait été "ROMisée".
Je ne comprends pas ce que tu me dis (à vue de nez ça renifle l'Internet Explorer)
d'ailleurs tu parlais de *.hta ... ça, je ne pratique pas :(
Perso, je ne peux parler que de fonctions JS pour le navigateur.
Peut-être veux-tu trop compliquer du 1er coup ? (ces histoires d'eval ne m'augurent pas trop)
J'ai voulu essayer, aussi, de tromper le système, en utilisant des objets intermédiaires (comme des pointeurs sur les fonctions). Mais il faudrait que je change de nom d'objet à chaque appel de la fonction, ce qui devient vite lourd.
oui, s'il faut changer à chaque appel, ou se réferer à tt un tas de pointeurs pas top!
Et puis, comme je l'ai dit, je débute en javascript ; alors je cherche un peu mes marques.
J'ai un peu l'impression que si tu débutes, tu débutes fort.
Néanmoins sans quelques exemples de code, pas bp d'aide pourra t'être apportée.
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Bonsoir !
Super-Méga-Génial !
"new Function" correspond exactement à ce que je cherchais. Merci beaucoup. Là, tu m'as sauvé la vie, en me faisant gagner assez de temps pour aller boire un coup, et éviter de mourir de déshydratation.
Bonne nuit -- Michel Claveau
Bonsoir !
Super-Méga-Génial !
"new Function" correspond exactement à ce que je cherchais. Merci beaucoup.
Là, tu m'as sauvé la vie, en me faisant gagner assez de temps pour aller
boire un coup, et éviter de mourir de déshydratation.
"new Function" correspond exactement à ce que je cherchais. Merci beaucoup. Là, tu m'as sauvé la vie, en me faisant gagner assez de temps pour aller boire un coup, et éviter de mourir de déshydratation.
Bonne nuit -- Michel Claveau
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Bonsoir !
Merci de t'être penché sur mon problème. Grâce au tuyau de Y.D, j'ai pu m'en sortir.
Sinon, tu as du nez, je passe bien par Internet Explorer. Mais c'est quasi obligatoire, vu que je dialogue avec mes applis d'arrière-plan par COM. C'est pour ça, aussi, que les exemples de codes sont difficiles à fournir, car il faut que les serveurs COM soient installés. De plus, I.E. étant lui-même serveur COM, je peux l'embarquer dans d'autres applications, afin de faciliter des migrations.
Pour les .HTA, ils présentent l'avantage de contourner plein de messages d'alertes qui arrivent avec du HTML, I.E. se croyant sur Internet.
Pour te donner une idée de ce sur quoi je travaille : un utilisateur qui aura un écran de consultation d'une base de données pourra modifier, à la volée, le code d'un bouton, sans passer par une quelconque compilation, ni par un designer quelconque. Il pourra également ajouter un champ à une table, tout en continuant à travailler dessus. Avant le "new Function", j'étais obligé de ressortir, puis re-rentrer dans la page.
Dernier détail : si je débute en javascript, j'ai un peu plus d'expérience avec d'autres langages.
Merci de t'être penché sur mon problème. Grâce au tuyau de Y.D, j'ai pu m'en
sortir.
Sinon, tu as du nez, je passe bien par Internet Explorer. Mais c'est quasi
obligatoire, vu que je dialogue avec mes applis d'arrière-plan par COM.
C'est pour ça, aussi, que les exemples de codes sont difficiles à fournir,
car il faut que les serveurs COM soient installés. De plus, I.E. étant
lui-même serveur COM, je peux l'embarquer dans d'autres applications, afin
de faciliter des migrations.
Pour les .HTA, ils présentent l'avantage de contourner plein de messages
d'alertes qui arrivent avec du HTML, I.E. se croyant sur Internet.
Pour te donner une idée de ce sur quoi je travaille : un utilisateur qui
aura un écran de consultation d'une base de données pourra modifier, à la
volée, le code d'un bouton, sans passer par une quelconque compilation, ni
par un designer quelconque. Il pourra également ajouter un champ à une
table, tout en continuant à travailler dessus. Avant le "new Function",
j'étais obligé de ressortir, puis re-rentrer dans la page.
Dernier détail : si je débute en javascript, j'ai un peu plus d'expérience
avec d'autres langages.
Merci de t'être penché sur mon problème. Grâce au tuyau de Y.D, j'ai pu m'en sortir.
Sinon, tu as du nez, je passe bien par Internet Explorer. Mais c'est quasi obligatoire, vu que je dialogue avec mes applis d'arrière-plan par COM. C'est pour ça, aussi, que les exemples de codes sont difficiles à fournir, car il faut que les serveurs COM soient installés. De plus, I.E. étant lui-même serveur COM, je peux l'embarquer dans d'autres applications, afin de faciliter des migrations.
Pour les .HTA, ils présentent l'avantage de contourner plein de messages d'alertes qui arrivent avec du HTML, I.E. se croyant sur Internet.
Pour te donner une idée de ce sur quoi je travaille : un utilisateur qui aura un écran de consultation d'une base de données pourra modifier, à la volée, le code d'un bouton, sans passer par une quelconque compilation, ni par un designer quelconque. Il pourra également ajouter un champ à une table, tout en continuant à travailler dessus. Avant le "new Function", j'étais obligé de ressortir, puis re-rentrer dans la page.
Dernier détail : si je débute en javascript, j'ai un peu plus d'expérience avec d'autres langages.