Tôi gặp vấn đề này với InternalHTML, tôi đã phải thêm tập lệnh Hotjar vào thẻ "head" của ứng dụng Reactjs của mình và nó sẽ phải thực thi ngay sau khi nối thêm.
Một trong những giải pháp tốt để nhập Node động vào thẻ "head" là mô-đun React-helment .
Ngoài ra, có một giải pháp hữu ích cho vấn đề được đề xuất:
Không có thẻ script trong InternalHTML!
Hóa ra HTML5 không cho phép các thẻ script được thêm động bằng cách sử dụng thuộc tính InternalHTML. Vì vậy, những điều sau đây sẽ không được thực thi và sẽ không có cảnh báo nào nói Hello World!
element.innerHTML = "<script>alert('Hello World!')</script>";
Điều này được ghi lại trong thông số HTML5:
Lưu ý: các phần tử tập lệnh được chèn bằng InternalHTML không thực thi khi chúng được chèn.
Nhưng hãy cẩn thận, điều này không có nghĩa là InternalHTML an toàn khỏi kịch bản chéo trang. Có thể thực thi JavaScript thông qua InternalHTML mà không cần sử dụng các thẻ như được minh họa trên trang InternalHTML của MDN .
Giải pháp: Tự động thêm tập lệnh
Để tự động thêm thẻ tập lệnh, bạn cần tạo một phần tử tập lệnh mới và nối nó vào phần tử đích.
Bạn có thể làm điều này cho các tập lệnh bên ngoài:
var newScript = document.createElement("script");
newScript.src = "http://www.example.com/my-script.js";
target.appendChild(newScript);
Và các tập lệnh nội tuyến:
var newScript = document.createElement("script");
var inlineScript = document.createTextNode("alert('Hello World!');");
newScript.appendChild(inlineScript);
target.appendChild(newScript);