Hello,
Dans le cadre d'un développement perso en DHTML, je suis amené a charger / décharger dynamiquement des bibliothèques de fonctions javascript.
Pour cela, j'utilise les fonctions suivantes :
function includeScript(scriptSrc, scriptId) { var docHead = document.getElementsByTagName('head'); var newScript = document.createElement('script'); newScript.setAttribute("type","text/javascript" ); newScript.setAttribute("src", scriptSrc); newScript.setAttribute("id", scriptId); docHead[0].appendChild(newScript); } function removeScript(scriptId) { var allScripts = document.getElementsByTagName('script'); for (var i = allScripts.length-1; i>=0; i--) { // On recherche a l'envers if (allScripts[i].id == scriptId) { // on supprimme le fils en passant par le noeud parent. allScripts[i].parentNode.removeChild(allScripts[i]); } } } |
Ces fonctions marchent très bien afin de rajouter de nouveaux noeuds "scripts" contenant des fonctions, en revanche, je rencontre un problème lorsque je cherche a supprimer une bibliothèque de fonctions :
Le noeud est correctement supprimé, mais les fonctions qui ont été chargées précédemment, elles, ne le sont pas :
Elles restent en mémoire.
Je m'explique :
Supposons que j'aie deux fichiers script1.js et script2.js
script1.js contient :
function helloA()
{alert('A')}
script2.js contient :
function helloB()
{alert('B')}
je charge script1.js :
Je peux appeler helloA()
Je ne peux pas appeler helloB()
Je décharge script1.js
Je charge script2.js
Je peux appeler helloB()
Je peux toujours appeler helloA()
Y a t'il un moyen pour s'assurer qu'en supprimant le noeud <script> contenant des fonctions, je m'arrange pour également supprimer l'ensemble de ces fonctions ?
J'ai pensé inclure dans script1.js une fonction du type :
function cleanFunctions() { helloA = undefined; cleanFunctions = undefined; } |
Mais je suis tout sauf certain du résultat..
Des idées ?
Message édité par Aranthys le 03-09-2008 à 23:54:39
---------------
♪ Living is easy with eyes closed, misunderstanding all you see... It's getting hard to be someone but it all works out, It doesn't matter much to me. ♪