Tuve este problema con innerHTML, tuve que agregar un script Hotjar a la etiqueta "head" de mi aplicación Reactjs y tendría que ejecutarse justo después de agregarlo.
Una de las buenas soluciones para la importación dinámica de nodos en la etiqueta "head" es el módulo React-helment .
Además, hay una solución útil para el problema propuesto:
¡No hay etiquetas de script en innerHTML!
Resulta que HTML5 no permite que las etiquetas de script se agreguen dinámicamente usando la propiedad innerHTML. Por lo tanto, lo siguiente no se ejecutará y no habrá ninguna alerta que diga ¡Hola mundo!
element.innerHTML = "<script>alert('Hello World!')</script>";
Esto está documentado en la especificación HTML5:
Nota: los elementos de script insertados con innerHTML no se ejecutan cuando se insertan.
Pero cuidado, esto no significa que innerHTML esté a salvo de secuencias de comandos entre sitios. Es posible ejecutar JavaScript a través de innerHTML sin usar etiquetas como se ilustra en la página innerHTML de MDN .
Solución: agregar scripts dinámicamente
Para agregar dinámicamente una etiqueta de secuencia de comandos, debe crear un nuevo elemento de secuencia de comandos y agregarlo al elemento de destino.
Puede hacer esto para scripts externos:
var newScript = document.createElement("script");
newScript.src = "http://www.example.com/my-script.js";
target.appendChild(newScript);
Y guiones en línea:
var newScript = document.createElement("script");
var inlineScript = document.createTextNode("alert('Hello World!');");
newScript.appendChild(inlineScript);
target.appendChild(newScript);