cs_cucrapock
Messages postés13Date d'inscriptionjeudi 22 mars 2007StatutMembreDernière intervention 3 avril 2008
-
27 mars 2008 à 09:57
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 2013
-
3 avril 2008 à 16:04
Bonjour à tous,
je réalise un petit server control avec une partie javascript côté client. Cette dernière créée dynamiquement des tag <script> vide avec un attribut src donné permettant de récupérer le code javascript côté serveur. Mon problème c'est que une fois mon code javascript terminé, je voudrais effacer le tag <script> précédemment créée. Mon code d'effacement est le suivant
function MSC_COUNTER_DelScriptTag(sDomName)
{
try{
//Get the node to delete
var oNodeToDelete = document.getElementById(sDomName);
//If this node exists then delete it
if(oNodeToDelete!=null)
{
//Erase all his children
while(oNodeToDelete.childNodes.length > 0) {
MSC_COUNTER_DelScriptTag(oNodeToDelete.childNodes[oNodeToDelete.childNodes.length-1]);
}
//Then remove the node
oNodeToDelete.parentNode.removeChild(oNodeToDelete);
}
//Put all variables to null to avoid memory leack
oNodeToDelete = null;
}
catch(e){
alert("Exception dell script "+sDomName+" ==> "+e);
}
}
Et là ça ne marche pas, mon nombre de noeuds dans la page augmente continuellement et je finis avec un navigateur qui occupe une mémoire énorme.
PetoleTeam
Messages postés3426Date d'inscriptionlundi 26 décembre 2005StatutMembreDernière intervention14 janvier 201117 27 mars 2008 à 19:49
Bonjour,
<table bgcolor= "#e6effe" border="0" cellpadding="5" cellspacing="0" width="100%">----, ...une fois mon code javascript
terminé...</td>
</td></tr></tbody></table>on
présume qu'il s'est donc excécuté, dans ce cas pourquoi le détruire ?
D'autre part pas sur que la suppression du script ne l'empêche pas de
fonctionner, il est en mémoire...
J'ai testé ceci et cela continu de
fonctionner
<html>
<head>
<script type="text/javascript" id="S_0">
var i = 1;
//----------------
function Fct_Btn(){
alert( i++);
}
</script>
<script
type ="text/javascript" id= "S_1">
//------------------------
function Kill_Script(
id_){
var Obj = document.getElementById( id_);
if( Obj){
<table bgcolor="#e6effe" border="0" cellpadding="5" cellspacing="0" width="100%">----, ...mon nombre de noeuds dans la page augmente
continuellement...</td>
</td></tr></tbody></table>il
n'y a pas de raison...
cs_cucrapock
Messages postés13Date d'inscriptionjeudi 22 mars 2007StatutMembreDernière intervention 3 avril 2008 28 mars 2008 à 09:39
Bonjour,
en fait je cherche à l'effacer pour ensuite puis que ce code, basé sur un script tag hack, doit faire une requête au serveur toutes les x secondes. C'est pourquoi je crée un script qui fai un appel (en mettant le src à une valeur), le détruit, attend quelques secondes, en crée un autre... Sauf que quand je les détruit, IE en garde visiblement une référence et le nombre de noeud augmente continuellement (testé avec drip http://outofhanwell.com/ieleak/index.php?title=Main_Page). C'est pourquoi je cherche un moyen de les effacer aussi en mémoire.
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 28 mars 2008 à 09:55
>>C'est pourquoi je crée un script qui fai un appel (en mettant
le src à une valeur),
>>le détruit, attend quelques secondes, en crée un
autre..
pourquoi le détruire pour le recréer ?
rappelle le même ! ce sera bien plus simple, rapide....
<hr /> Cordialement Bul [mon Site] [M'écrire]
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_cucrapock
Messages postés13Date d'inscriptionjeudi 22 mars 2007StatutMembreDernière intervention 3 avril 2008 28 mars 2008 à 10:54
Re,
j'ai déjà essayé de rappeler le même (en mettant à jour le src) mais le prob c'est que ca marche pour certains navigateurs mais pas pour tous. Du coup je suis obligé de supprimer les tag et de les recréer dans certains cas :S
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 28 mars 2008 à 12:13
>>c'est que ca marche pour certains navigateurs mais pas pour tous
aucune raison... tu ne dois pas faire tout à fait comme il faudrait.
on peut voir ? ( un extrait, l'essentiel, tout ce qu'il faut, mais pas plus ! )
<hr /> Cordialement Bul [mon Site] [M'écrire]
cs_cucrapock
Messages postés13Date d'inscriptionjeudi 22 mars 2007StatutMembreDernière intervention 3 avril 2008 28 mars 2008 à 14:02
Re,
voila le code que j'effectue à chaque besoin d'appel du script :
....
//Get the script tag
var sc = document.getElementById(sScriptName);
//If it doesn't exists, we create it and append it to doc
if(sc==null){
sc=document.createElement('script');
sc.type='text/javascript';
sc.id=sScriptName;
oDivScript.appendChild(sc);
}
//Put the correct url sc.src="counteur.aspx?requestType="+encodeURIComponent(0)+'&EnableDownloadTestCalc='+encodeURIComponent(bDownloadEnabled)+'&EnableUploadTestCalc='+encodeURIComponent(bUploadEnabled)+'&tickPeriod='+encodeURIComponent(iTickPeriod)+'&counterType='+encodeURIComponent(sCounterType)+'&DownloadTestPeriod='+encodeURIComponent(iDownloadTestPeriod)+'&UploadTestPeriod='+encodeURIComponent(iUploadTestPeriod)+'¤tAddress='+encodeURIComponent(currentAddress)+"&r="+Math.random()+"&dataTransfered="+encodeURIComponent(lScriptSize)+"&functionsSuffix="+encodeURIComponent(sFunctionsSuffix)+"&FilterPercentage="+encodeURIComponent(iFilterPercentage);
.....
(les paramètres de l'url sont passés directement à la fonction)
PetoleTeam
Messages postés3426Date d'inscriptionlundi 26 décembre 2005StatutMembreDernière intervention14 janvier 201117 28 mars 2008 à 14:19
Bonjour,
<table bgcolor="#e6effe" border="0" cellpadding="5" cellspacing="0" width="100%">----, ...doit faire une requête au serveur toutes
les x
secondes...</td>
</td></tr></tbody></table>pourquoi
ne pas utiliser un setInterval ?
;O)
cs_cucrapock
Messages postés13Date d'inscriptionjeudi 22 mars 2007StatutMembreDernière intervention 3 avril 2008 28 mars 2008 à 14:50
Re,
en fait vu que c'est du script tag hack l'url que je passe ne pointe sur rien du tout de concret... J'ai juste mis en place un handler qui récupère toutes les requêtes vers l'adresse passée dans l'attribut src du tag script, fait des traitements coté serveur (avec des interaction BD) et renvoie un appel de fonction Js (avec ds résultats en Json) elle contenu dans un script client connu de la page car enregistré au tout premier chargement. C'est pour ça qu'il me faut changer plusieurs fois l'adresse du src du tag script et ainsi pouvoir faire plusieurs appels serveurs.
J'espère avoir un peu clair (ya rien de moins sûr :S)
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 28 mars 2008 à 15:12
>>C'est pour ça qu'il me faut changer plusieurs fois l'adresse du src
>>du
tag script et ainsi pouvoir faire plusieurs appels serveurs.
je ne suis toujours pas....
un script js c'est un script js
s'il "diffère en fonction du serveur" (???), "il suffit" de passer
les bons paramètres aux fonctions, compte tenu de je ne sais quoi...
il me semble que tu compliques la vie... mais je n'ai pas toutes les billes...
<hr /> Cordialement Bul [mon Site] [M'écrire]
cs_cucrapock
Messages postés13Date d'inscriptionjeudi 22 mars 2007StatutMembreDernière intervention 3 avril 2008 3 avril 2008 à 15:31
Bonjour bonjour,
désolé pour ce délai depuis mon dernier post vacances oblige ^^. Effectivement c'est ce que je fait : après chaque appel serveur, le serveur renvoie un appel de la même fonction Js avec des valeurs de paramètres différentes. Ce qu'il y a c'est que je ne peut déterminer les valeurs de ces paramètres que côté serveur. C'est pour cela que je voudrais changer la valeur de l'attribut src du tag script pour "rappeler" à chaque fois le serveur et me renverra le bon appel de méthode js. Ajax (via XmlHttp request) pourrait marcher très bien mais je risque de devoir faire du cross domain à terme ce qui rend son utilisation impossible. Pour le moement ma solution marche très bien mais à chaque changement de l'attribut src du tag <script> IE prend un peu plus de mémoire (pas gd chose en plus mais à terme ça fait beaucoup). Je pense qu'en fait il garde en mémoire une référence des derniers résultats d'appels serveur. J'ai essayer de les effacer en faisant monTagScript.innerHTML = '' mais Ie n'aime pas du tout et génère une exception. Comment puis je faire pour les "vider" et éviter cela?
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 3 avril 2008 à 16:04
>>Ce qu'il y a c'est que je ne peut déterminer les valeurs de ces paramètres que côté serveur
certes....
mais, met 1 seule fonction dasn le html,
avec des appels différents, générés par le seveur !
tu n'auras rien à effacer.
<hr /> Cordialement Bul [mon Site] [M'écrire]