Effacer tag script

Signaler
Messages postés
13
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
3 avril 2008
-
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
-
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.

Quelqu'un aurait il une solution à mon problème?

D'avance merci

15 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
Bonjour,

comment est appelé la fonction ? qui a-t-il dans sDomName ?

et ça ne me regarde probablement pas... mais pourquoi tenter de les détruire ?
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
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){

    alert( Obj.id);
    Obj.parentNode.removeChild( Obj);
  }
}

</script>
</head>






</html>

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

;O)
Messages postés
13
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
3 avril 2008

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.

D'avance merci

Martin
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
>>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]
Messages postés
13
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
3 avril 2008

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

D'avance merci

Martin
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
>>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]
Messages postés
13
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
3 avril 2008

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)+'&currentAddress='+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)

Merci d'avance

Martin
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
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)
Messages postés
13
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
3 avril 2008

C'est ce que je fais. Je lance à interval régulier la fonction ci dessus qui rafraichit l'attribut src du tag.
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
pourquoi ne pas utiliser un setInterval pour excécuter la fonction qui va bien issue d'un fichier js ou faire une requête via ajax...
;O)
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
ah... je ne suis pas tout là....

        sc= document.createElement('script');
        sc.type='text/javascript';
        sc.id=sScriptName;
        oDivScript.appendChild(sc);

    et on charge quoi ?   comment ?

    var s = document.createElement('SCRIPT');
    s.type = 'text/javascript";
    s.src='url du .js';
    document.body .appendChild(s);   // par exemple !

    à faire 1 fois   ... quoique
    <script type ="text/javascript" src="url du .js"></script> irait tout aussi bien !

    puis après on fait appel aux fonctions contenus dans "url du .js"

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
13
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
3 avril 2008

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)

D'avance merci

Martin
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
>>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]
Messages postés
13
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
3 avril 2008

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?

D'avance merci.

Martin
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
>>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]