У меня была эта проблема с innerHTML, мне пришлось добавить скрипт Hotjar в тег «head» моего приложения Reactjs, и он должен был выполняться сразу после добавления.
Одним из хороших решений для динамического импорта узлов в тег head является модуль React-helment .
Также есть полезное решение для предложенного вопроса:
Нет тегов сценария в innerHTML!
Оказывается, HTML5 не позволяет динамически добавлять теги сценария с помощью свойства innerHTML. Таким образом, следующее не будет выполнено, и не будет никакого предупреждения, говорящего Привет Мир!
element.innerHTML = "<script>alert('Hello World!')</script>";
Это задокументировано в спецификации HTML5:
Примечание. Элементы сценария, вставленные с использованием innerHTML, не выполняются при вставке.
Но будьте осторожны, это не означает, что innerHTML безопасен от межсайтовых скриптов. Возможно выполнение JavaScript через innerHTML без использования тегов, как показано на странице innerHTML MDN .
Решение: динамическое добавление скриптов
Чтобы динамически добавить тег сценария, вам нужно создать новый элемент сценария и добавить его к целевому элементу.
Вы можете сделать это для внешних скриптов:
var newScript = document.createElement("script");
newScript.src = "http://www.example.com/my-script.js";
target.appendChild(newScript);
И встроенные скрипты:
var newScript = document.createElement("script");
var inlineScript = document.createTextNode("alert('Hello World!');");
newScript.appendChild(inlineScript);
target.appendChild(newScript);