Eu tive esse problema com o innerHTML, tive que anexar um script Hotjar à tag "head" do meu aplicativo Reactjs e ele teria que ser executado logo após o acréscimo.
Uma das boas soluções para importação dinâmica de Nó para a tag "head" é o módulo React-helment .
Além disso, há uma solução útil para o problema proposto:
Nenhuma tag de script no innerHTML!
Acontece que o HTML5 não permite que tags de script sejam adicionadas dinamicamente usando a propriedade innerHTML. Portanto, o seguinte não será executado e não haverá alerta dizendo Olá, mundo!
element.innerHTML = "<script>alert('Hello World!')</script>";
Isso está documentado na especificação HTML5:
Nota: os elementos de script inseridos usando innerHTML não são executados quando são inseridos.
Mas cuidado, isso não significa que innerHTML esteja a salvo de scripts entre sites. É possível executar JavaScript via innerHTML sem usar tags, conforme ilustrado na página innerHTML do MDN .
Solução: Adicionando scripts dinamicamente
Para adicionar dinamicamente uma tag de script, você precisa criar um novo elemento de script e anexá-lo ao elemento de destino.
Você pode fazer isso para scripts externos:
var newScript = document.createElement("script");
newScript.src = "http://www.example.com/my-script.js";
target.appendChild(newScript);
E scripts embutidos:
var newScript = document.createElement("script");
var inlineScript = document.createTextNode("alert('Hello World!');");
newScript.appendChild(inlineScript);
target.appendChild(newScript);