geklont & lt; script & gt; Tags werden nicht ausgeführt. Warum?
Beispiel:
%Vor%Nach der Ausführung gibt es zwei Hello-Skripte im Dokument, von denen nur eines ausgeführt wurde.
Dies ist Teil eines größeren Problems, an dem ich arbeite, also weiß ich, dass es eine dumme Sache ist.
Dieses Verhalten wird von der W3C-HTML5-Spezifikation gefordert.
Jedes <script>
-Element hat ein Eigenschaftsflag namens " bereits gestartet ". Die Spezifikation sagt:
Anfänglich muss bei Skriptelementen diese Markierung nicht gesetzt sein (Skriptblöcke, wenn sie erstellt werden, sind nicht "bereits gestartet"). Die Cloning-Schritte für Skriptelemente müssen das Flag "Bereits gestartet" für die Kopie festlegen, wenn es für das geklonte Element festgelegt ist.
Und dann später:
Wenn das Skriptelement als "bereits gestartet" markiert ist, muss der Benutzeragent diese Schritte an dieser Stelle abbrechen. Das Skript wird nicht ausgeführt.
Die Lösung besteht einfach nicht darin, Skriptelemente zu klonen, sondern komplett neue Elemente zu erstellen, die mit demselben Inhalt gefüllt sind.
Im Prinzip macht der Browser Folgendes, wenn er <script>
auf der Seite ausführt:
Wenn das Skript <script>
nicht ausgeführt wurde, bevor es Folgendes ausführt:
<script>
; eval(thatScriptText)
; <script>
DOM als ausgeführt; Wenn Sie den Knoten klonen, erhält er das interne Flag "executed", das Skript verhindert weitere Ausführungen.
Lösung: Wenn Sie möchten, dass das Skript erneut ausgeführt wird, führen Sie die Schritte 1 und 2 aus. Klonen ist in diesem Fall nicht erforderlich.
Tags und Links javascript dom