2009-10-22 6 views
1

Je sais. Il est possible de charger dynamiquement JavaScript et le fichier de feuille de style dans l'en-tête du document. D'autre part, il est possible de supprimer le script et la balise de feuille de style de l'en-tête du document. Cependant, le JavaScript chargé est toujours en mémoire.Est-il possible de détruire JavaScript chargé, y compris la fonction et la variable locale?

Est-il possible de détruire le JavaScript chargé à partir de la mémoire du navigateur Web? Je pense. Cela devrait ressembler au pseudo code suivant.

// Scan all variables in loaded JavaScript file. 
var loadedVariable = getLoadedVariable(JavaScriptFile); 

for(var variable in loadedVariable) 
{ 
    variable = null; 
} 

// Do same thing with function. 

Est-il possible de créer du JavaScript pour faire comme ça?

Merci,

PS. Maintenant, vous pouvez utiliser xLazyLoader et jQuery pour le chargement dynamique du contenu.

+0

Pourquoi pensez-vous que vous en avez besoin? – moonshadow

+0

Parce que je veux créer une application web qui n'a pas d'iframe. Chaque page sera chargée via Ajax. De plus, JavaScript et la feuille de style seront chargés en fonction des exigences de la page. Après cela, le moteur détruira JavaScript et la feuille de style inutilisés pour réduire le nom en double de la fonction, de la variable, de la règle de JavaScript et de la feuille de style. –

Répondre

3

Si le script chargé est affecté à une propriété window, par exemple avec le motif de module comme ceci:

window.NiftyThing = (function() { 
    function doSomething() { ... } 
    return { 
     doSomething: doSomething 
    }; 
})(); 

ou

window.NiftyThing = { 
    doSomething: function() { ... } 
}; 

ou

NiftyThing = { 
    doSomething: function() { ... } 
}; 

Ensuite, vous pouvez supprime la propriété qui le référence:

delete window.NiftyThing; 

... qui supprime au moins cette référence principale; S'il y a d'autres références, il se peut qu'il ne soit pas nettoyé.

Si le mot-clé var a été utilisé:

var NiftyThing = { 
    doSomething: function() { ... } 
}; 

... alors ce n'est pas une propriété et vous ne pouvez pas utiliser delete, mise ainsi undefined ou null cassera la référence:

NiftyThing = undefined; 

Vous pouvez couvrir vos paris:

NiftyThing = undefined; 
try { delete NiftyThing; } catch (e) { } 

Dans tous les cas, il appartient à l'implémentation JavaScript de déterminer qu'il n'y a pas de références externes en suspens au script chargé et de le nettoyer, mais au moins vous lui donnez l'opportunité. Si, comme le dit Guffa, le script chargé n'utilise pas le modèle de module, vous devez appliquer ces règles à tous ses symboles. Ce qui est encore une autre raison pour laquelle le modèle de module est une bonne chose (tm).;-)

+0

Par conséquent, j'ai besoin d'utiliser l'expression régulière pour trouver tous les modèles possibles de variables et de fonctions. Droite? –

+0

Si vous essayez de le faire sans savoir ce que vous déchargez, je pense que vous avez beaucoup de travail devant vous. Et vous ne saurez pas que cela marchera même; le script pourrait avoir défini des gestionnaires d'événements, qui conserveront des références. Vous pourriez finir par le casser (gestionnaire d'événements essayant d'appeler une fonction via un symbole que vous avez supprimé) plutôt que de le supprimer. –

1

Il peut être possible de supprimer un fichier Javascript qui a été chargé, mais cela ne supprime pas ce que le code a fait, c'est-à-dire que les fonctions qui étaient dans le code sont encore définies.

Vous pouvez supprimer une définition de fonction simplement le remplacer par quelque chose d'autre:

myFunction = null; 

Cela ne supprime pas l'identifiant, mais ce n'est pas une fonction plus.

+0

Puis-je le supprimer en définissant une valeur indéfinie? –

+0

@Soul_Master: Oui, indéfini ou null fonctionnera. –

Questions connexes