Wie kann ich eine JavaScript-Ressource mit allen definierten Objekten aus dem DOM entfernen?Wie man ein Javascript von einem HTML löscht?
Ich entwickle ein einfaches Framework, das HTML-Fragmente in einen "Haupt" -Html laden kann. Jedes Fragment ist eigenständig und kann Verweise auf zusätzliche JS- und CSS-Dateien enthalten. Die JS- und CSS-Ressourcen werden analysiert und dem HTML dynamisch hinzugefügt. Wenn das Fragment aus dem DOM entfernt/ersetzt wird, möchte ich JS und CSS entfernen.
Wenn ich das Skriptelement im folgenden Beispiel entferne, sind die in page1.js definierten Funktionen weiterhin verfügbar.
<html>
<head>
<script src="page1.js" type="text/javascript"></script>
</head>
<body>
...
Gibt es eine Möglichkeit, page1.js Objekte aus dem DOM zu entladen?
========= Der Testcode Ich benutze =======
ich den Rat habe ich versucht, in den Kommentaren unten bekam; Löschen der hinzugefügten Objekte mit einer Bereinigungsfunktion - aber selbst dies schlägt fehl. Die Quellen i für den Test verwendet:
<html>
<head>
<script type="text/javascript">
function loadJSFile(){
var scriptTag = document.createElement("script");
scriptTag.setAttribute("type", "text/javascript");
scriptTag.setAttribute("src", "simple.js");
var head = document.getElementsByTagName("head")[0];
head.appendChild(scriptTag);
}
function unloadJSFile(){
delete window.foo;
delete window.cleanup;
alert("cleanedup. typeof window.foo is " + (typeof window.foo));
}
</script>
</head>
<body>
Hello JavaScript Delete
<br/>
<button onclick="loadJSFile();">Click to load JS</button>
<br/>
<button onclick="foo();">call foo()</button>
<br/>
<button onclick="unloadJSFile();">Click to unload JS</button>
</body>
</html>
simple.js Quelle:
var foo = function(){
alert("hello from foo");
}
Wenn Sie es in einer objektiven Weise betrachten, versuchen Sie, dasselbe wie in zu tun: http://stackoverflow.com/questions/3830133/avoiding-pollution-of-globals-via-iframe-script -loader/3882324 # 3882324. . iframes scheinen ein ziemlich normaler Weg zu sein, so viel wie möglich in Bezug auf die Bereinigung zu tun. –
@Ravindra: Ich kann nicht iFrames verwenden, weil ich nicht weiß, was die Dimension des Fragments ist, außerdem muss das Fragment mit dem vorhandenen Code auf der Seite kommunizieren. – Totach
Wird die Ressource JS von Ihnen gepflegt? Wenn ja, wird ein wenig Architektur um das JS sicherlich hilfreich sein. Die Antworten unten von cdhowie und schwer zu helfen wäre –