Gibt es eine Möglichkeit geladene JavaScript Scripts zu entfernen und sie zu entladen?

3 Antworten

Die naheliegendste Lösung wäre es, einen Flag einzubauen, der die Ausführung deaktivieren kann. Dazu müsste das Skript diesen Flag aber auch regelmäßig prüfen.

Beispiel:

let activated = true;

while (activated) {
  // do something ...
}

Eine Schleife wird aber, verständlicherweise, nicht für jeden Anwendungsfall passen. Oft sollen Vorgänge ja nur einmal ausgeführt werden. Bei einem längeren Prozess hingegen (der bspw. mittendrin unterbrochen werden soll) wäre eine Event Loop schon ein erster Ansatz. Alle Aktionen müssten in einer Queue einsortiert werden und vor jeder Abarbeitung des nächsten Eintrags würde eine Prüfung erfolgen, ob das noch zulässig ist oder nicht.

Events und Timer kannst du übrigens stoppen, wenn du eine Referenz auf sie besitzt. Schlage bspw. Funktionen wie clearTimeout, clearInterval, removeEventListener auf MDN nach.

Die folgenden Lösungsvorschläge beziehen sich auf eine grundsätzliche De-/Aktivierung vor Ausführung eines Skripts.

a) Beim Laden des Skripts wird der Wert des Flags erst geprüft. Dieser könnte praktischerweise in einem Cookie stehen. Wenn es noch keinen Cookie gibt, wird dem Flag ein Fallbackwert zugeordnet (z.B. false).

let activated = getCookieValue("activated");

if (activated) {
  /* ... */
} 

b) Wenn der Wert des Flags sich ändert, könnte man ein Event triggern:

const scriptActivatedEvent = new Event("scriptActivated");

document.addEventListener("scriptActivated", function (evt) {
  /* script code ... */
}, false);

// if flag value changes to true:
document.dispatchEvent(scriptActivatedEvent);

c) In manchen Fällen kann man auch Folgeprozesse unterbrechen, indem man einfach einen Laufzeitfehler erzeugt.

throw new Error("Stop");

So eine Lösung sollte aber besser vermieden werden, denn sie ist ziemlich unschön.

ne , eigentlich nicht .

HNSyt 
Fragesteller
 17.06.2021, 21:36

Und sie nur zu deaktieren?

0