Ich hatte dieses Problem mit innerHTML. Ich musste ein Hotjar-Skript an das "head" -Tag meiner Reactjs-Anwendung anhängen und es musste direkt nach dem Anhängen ausgeführt werden.
Eine der guten Lösungen für den dynamischen Knotenimport in das "head" -Tag ist React-helment Modul.
Es gibt auch eine nützliche Lösung für das vorgeschlagene Problem:
Keine Skript-Tags in innerHTML!
Es stellt sich heraus, dass HTML5 das dynamische Hinzufügen von Skript-Tags mithilfe der innerHTML-Eigenschaft nicht zulässt. Das Folgende wird also nicht ausgeführt und es wird keine Warnung mit der Aufschrift "Hallo Welt!" Angezeigt.
element.innerHTML = "<script>alert('Hello World!')</script>";
Dies ist in der HTML5-Spezifikation dokumentiert:
Hinweis: Skriptelemente, die mit innerHTML eingefügt wurden, werden beim Einfügen nicht ausgeführt.
Beachten Sie jedoch, dass innerHTML nicht vor Cross-Site-Scripting geschützt ist. Es ist möglich, JavaScript über innerHTML auszuführen, ohne Tags zu verwenden, wie auf der innerHTML-Seite von MDN dargestellt .
Lösung: Dynamisches Hinzufügen von Skripten
Um ein Skript-Tag dynamisch hinzuzufügen, müssen Sie ein neues Skriptelement erstellen und an das Zielelement anhängen.
Sie können dies für externe Skripte tun:
var newScript = document.createElement("script");
newScript.src = "http://www.example.com/my-script.js";
target.appendChild(newScript);
Und Inline-Skripte:
var newScript = document.createElement("script");
var inlineScript = document.createTextNode("alert('Hello World!');");
newScript.appendChild(inlineScript);
target.appendChild(newScript);