У меня была эта проблема с innerHTML, мне пришлось добавить сценарий Hotjar в тег «head» моего приложения Reactjs, и он должен был выполняться сразу после добавления.
Одним из хороших решений для динамического импорта узлов в тег «head» является модуль React-helment.
Также есть полезное решение предложенной проблемы:
В innerHTML нет тегов скрипта!
Оказывается, HTML5 не позволяет динамически добавлять теги скриптов с помощью свойства innerHTML. Таким образом, следующее не будет выполнено, и не будет предупреждений с сообщением Hello World!
element.innerHTML = "<script>alert('Hello World!')</script>";
Это задокументировано в спецификации HTML5:
Примечание: элементы скрипта, вставленные с помощью innerHTML, не выполняются при вставке.
Но будьте осторожны, это не означает, что innerHTML защищен от межсайтовых сценариев. Можно выполнять JavaScript через innerHTML без использования тегов, как показано на MDN. страница innerHTML.
Решение: динамическое добавление скриптов
Чтобы динамически добавить тег скрипта, вам необходимо создать новый элемент скрипта и добавить его к целевому элементу.
Вы можете сделать это для внешних скриптов:
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);
person
p.daniel
schedule
11.11.2019