Si trato de hacer algo como esto:
let div = document.createElement('DIV'); div.innerHTML="<script>console.log('test');</script>"; document.body.appendChild(div);no se muestra ningún mensaje. Además, no hay advertencias/errores de CSP.
¿Es esta una función de seguridad?
No publique una respuesta de que es posible inyectar una etiqueta de secuencia de comandos directamente, estoy al tanto de esto.
Nota: los elementos de script insertados mediante innerHTML no se ejecutan cuando se insertan.
https://www.w3.org/TR/2008/WD-html5-20080610/dom.html#dynamic0
Como dijo Maciej , no puedes hacer eso con innerHTML .
Pero podría escribir un pequeño script que ejecutaría ( reemplazando con un script normal ) el script insertado después.
const div = document.createElement('DIV'); div.innerHTML = "<script>console.log('test');<\/script>YO"; document.body.appendChild(div); executeScriptsInNode(div); function executeScriptsInNode(node) { const scripts = node.querySelectorAll('script'); scripts.forEach(script => { const scriptNode = document.createElement('SCRIPT'); scriptNode.text = script.innerHTML; script.parentNode.replaceChild(scriptNode, script); }) }