Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1743 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Javascript : Utilisation d'includes dynamiques [Javascript avancé]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Javascript : Utilisation d'includes dynamiques [Javascript avancé]

n°1782351
Aranthys
Gâche sa vie avec son Pwôk
Posté le 03-09-2008 à 23:42:52  profilanswer
 

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.. :o

 

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. ♪
mood
Publicité
Posté le 03-09-2008 à 23:42:52  profilanswer
 

n°1782363
Aranthys
Gâche sa vie avec son Pwôk
Posté le 03-09-2008 à 23:56:49  profilanswer
 

Bon, je viens de tester mon idée
Ca marche ! :D
 
Ca veut dire que je vais moi-même devoir définir les fonctions de nettoyage dans chacune de mes bibliothèques de fonctions :fou:


---------------
♪ 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. ♪
n°1782370
SICKofitAL​L
misanthrope
Posté le 04-09-2008 à 00:00:27  profilanswer
 

Je pense que t'as pas le choix que d'indéfinir tes fonctions, car aucune fonctions n'est attachés au tag script qui l'a "chargé".

 

Par contre, il serait plus simple de créer ttes tes fonctions dans une classe (un objet en fait, une sorte de namespace), que tu n'aurais qu'à "nettoyer" lorsque t'en as plus besoin.

 

Genre :

Code :
  1. var mesFonctions = {};
  2. mesFonctions.func1 = function () { /* blabla1 */ };
  3. mesFonctions.func2 = function () { /* blabla2 */ };
  4. mesFonctions.func3 = function () { /* blabla3 */ };
  5. ...
  6. mesFonctions = undefined;
 

A essayer :)


Message édité par SICKofitALL le 04-09-2008 à 00:01:16

---------------
We deserve everything that's coming...
n°1782378
Aranthys
Gâche sa vie avec son Pwôk
Posté le 04-09-2008 à 00:09:29  profilanswer
 

Sympa egalement, oui :D

 

Mais je pense plutôt utiliser mon idée :

 

La finalité est identique (toutes les fonctions chargées passent a undefined), en revanche j'ai l'avantage de ne pas avoir a m'ennuyer a devoir modifier tous mes appels de func1() a mesFonctions.func1(), ni a definir toutes mes fonctions sous la forme mesFunctions.func1(), ce qui me parait être un gain de temps et de lisibilité.

 

Merci pour l'idée en tout cas, je n'avais pas penser rattacher les fonctions que je créais dynamiquement a un objet :)


Message édité par Aranthys le 04-09-2008 à 00:09:38

---------------
♪ 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. ♪
n°1782379
gatsu35
Blablaté par Harko
Posté le 04-09-2008 à 00:13:51  profilanswer
 

Personnellement l'idée de SICKofItall est largement plus propre que ta méthode de porc.  
Car quand on parle de librairie, on parle aussi de namespace afin de ne pas avoir toutes les fonctions au même endroit.
Et comme ce namespace est un objet. Il te suffit juste de le supprimer quand tu n'en a plus besoin (delete).
 
Et donc aussi de décharger le script derriere.

n°1782380
SICKofitAL​L
misanthrope
Posté le 04-09-2008 à 00:13:58  profilanswer
 

L'avantage étant que tu n'as que UN seul element à zapper :)
De plus, si tu charges d'autres script, qui ne sont pas forcément de toi, tu évites qu'ils s'écrasent l'un l'autre.
 [:graffin]


Message édité par SICKofitALL le 04-09-2008 à 00:14:37

---------------
We deserve everything that's coming...
n°1782382
Aranthys
Gâche sa vie avec son Pwôk
Posté le 04-09-2008 à 00:24:34  profilanswer
 

gatsu35 a écrit :

Personnellement l'idée de SICKofItall est largement plus propre que ta méthode de porc.  
Car quand on parle de librairie, on parle aussi de namespace afin de ne pas avoir toutes les fonctions au même endroit.
Et comme ce namespace est un objet. Il te suffit juste de le supprimer quand tu n'en a plus besoin (delete).
 
Et donc aussi de décharger le script derriere.


Certes :D
Ma méthode, s'pas une méthode de cochon, c'est juste moins élégant.... :o
 
Ouais, bon, ok, ok :d


---------------
♪ 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. ♪
n°1782384
SICKofitAL​L
misanthrope
Posté le 04-09-2008 à 00:28:51  profilanswer
 

Fais comme tu le sens. Mais en qq coup de chercher/remplacer tu rends ton code beau et moderne ! :sol:
 
;)


---------------
We deserve everything that's coming...
n°1782386
Aranthys
Gâche sa vie avec son Pwôk
Posté le 04-09-2008 à 00:44:28  profilanswer
 

SICKofitALL a écrit :

Fais comme tu le sens. Mais en qq coup de chercher/remplacer tu rends ton code beau et moderne ! :sol:

 

;)


Yep, je vais le faire, j'ai la flemme (  :whistle: ), mais de toutes façons, j'ai d'autres fonctions que je vais devoir transformer en bibliothèques.
Et cela devrait me permettre de gagner en lisibilité.


Message édité par Aranthys le 04-09-2008 à 00:44:40

---------------
♪ 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. ♪

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Javascript : Utilisation d'includes dynamiques [Javascript avancé]

 

Sujets relatifs
mixer frameworks javascript et php ...Affichage shtml - utilisation de SSI
[Javascript] Problème liste déroulante et jqueryIncompatibilité code HTML/Javascript Firefox / IE7
pb javascript et disabled sur des inputsTreeview et javascript
php et utilisation de dreamweaver mxutilisation du port serie sou linux qt en c++
[Javascript] - onBeforeUnload, problème de rafraichissementjavaScript et balise <area> pour rendre visible une div
Plus de sujets relatifs à : Javascript : Utilisation d'includes dynamiques [Javascript avancé]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR