İnnerHTML ile bu sorunu vardı, benim Reactjs uygulamasının "head" etiketine bir Hotjar komut dosyası eklemek zorunda kaldı ve hemen ekledikten sonra yürütmek zorunda kalacak.
"Head" etiketine dinamik Node içe aktarma için iyi çözümlerden biri React-helment modülüdür.
Ayrıca, önerilen sorun için yararlı bir çözüm var:
İnnerHTML'de komut dosyası etiketi yok!
HTML5'in, innerHTML özelliği kullanılarak komut dosyası etiketlerinin dinamik olarak eklenmesine izin vermediği ortaya çıkıyor. Bu yüzden aşağıdakiler yürütülmeyecek ve Hello World!
element.innerHTML = "<script>alert('Hello World!')</script>";
Bu HTML5 spesifikasyonunda belgelenmiştir:
Not: innerHTML kullanılarak eklenen komut dosyası öğeleri eklendiklerinde çalışmazlar.
Ancak unutmayın, bu innerHTML'nin siteler arası komut dosyalarından güvenli olduğu anlamına gelmez. MDN'nin innerHTML sayfasında gösterilen etiketleri kullanmadan JavaScript'i innerHTML aracılığıyla yürütmek mümkündür .
Çözüm: Dinamik olarak komut dosyası ekleme
Bir komut dosyası etiketini dinamik olarak eklemek için yeni bir komut dosyası öğesi oluşturmanız ve hedef öğeye eklemeniz gerekir.
Harici komut dosyaları için bunu yapabilirsiniz:
var newScript = document.createElement("script");
newScript.src = "http://www.example.com/my-script.js";
target.appendChild(newScript);
Ve satır içi komut dosyaları:
var newScript = document.createElement("script");
var inlineScript = document.createTextNode("alert('Hello World!');");
newScript.appendChild(inlineScript);
target.appendChild(newScript);