ฉันมีปัญหานี้กับ innerHTML ฉันต้องผนวกสคริปต์ Hotjar ต่อท้าย "แท็ก" ของแอปพลิเคชัน Reactj ของฉันและจะต้องดำเนินการทันทีหลังจากต่อท้าย
หนึ่งในโซลูชั่นที่ดีสำหรับการนำเข้าโหนดแบบไดนามิกในแท็ก "หัว" คือโมดูลตอบสนอง
นอกจากนี้ยังมีวิธีแก้ปัญหาที่มีประโยชน์สำหรับปัญหาที่เสนอ:
ไม่มีแท็กสคริปต์ใน innerHTML!
ปรากฎว่า HTML5 ไม่อนุญาตให้เพิ่มแท็กสคริปต์แบบไดนามิกโดยใช้คุณสมบัติ InnerHTML ดังนั้นสิ่งต่อไปนี้จะไม่ทำงานและจะไม่มีการเตือนว่า Hello World!
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);