write variable texto script resultado insertar funcion ejemplos div codigo campo javascript asynchronous onload document.write

javascript - variable - Execute write on doc: no es posible escribir en un documento desde una secuencia de comandos externa cargada de forma asíncrona a menos que se abra explícitamente.



innerhtml (3)

En caso de que esto sea útil para cualquier persona, tuve este mismo problema. Estaba ingresando un pie de página en una página web a través de jQuery. Dentro de ese pie de página había algunos guiones de Google para anuncios y reorientación. Tuve que mover esos guiones del pie de página y colocarlos directamente en la página y eso eliminó el aviso.

Estoy intentando cargar una determinada secuencia de comandos después de que se ejecuta la carga de la página, algo como esto:

function downloadJSAtOnload(){ var element = document.createElement("script"); element.src = "scriptSrc"; document.body.appendChild(element); } if (window.addEventListener) window.addEventListener("load", downloadJSAtOnload, false); else if (window.attachEvent) window.attachEvent("onload", downloadJSAtOnload); else window.onload = downloadJSAtOnload;

Y aunque este script parece ejecutarse y descargar ''scriptSrc'', y anexarlo justo antes del final de la etiqueta body, produce el siguiente mensaje (no es un error) en la consola (chrome)

No se pudo ejecutar ''write'' en ''Document'': no ​​es posible escribir en un documento desde un script externo cargado de forma asíncrona a menos que se abra explícitamente.

¿Qué significa esto? ¿Y se supone que debo hacer algo diferente? Aunque tengo el comportamiento esperado?


Es probable que un script cargado asíncronamente se ejecute DESPUÉS de que el documento haya sido completamente analizado y cerrado. Por lo tanto, no puede usar document.write() desde una secuencia de comandos (bien técnicamente puede, pero no hará lo que quiera).

Deberá reemplazar cualquier instrucción document.write() en esa secuencia de comandos con manipulaciones DOM explícitas creando los elementos DOM y luego insertándolos en un padre particular con .appendChild() o .insertBefore() o estableciendo .innerHTML o algún mecanismo para dirigir la manipulación DOM así.

Por ejemplo, en lugar de este tipo de código en una secuencia de comandos en línea:

<div id="container"> <script> document.write(''<span style="color:red;">Hello</span>''); </script> </div>

Lo usaría para reemplazar el script en línea arriba en un script cargado dinámicamente:

var container = document.getElementById("container"); var content = document.createElement("span"); content.style.color = "red"; content.innerHTML = "Hello"; container.appendChild(content);

O bien, si no hubiera otro contenido en el contenedor al que necesitabas agregar, simplemente podrías hacer esto:

var container = document.getElementById("container"); container.innerHTML = ''<span style="color:red;">Hello</span>'';


Un poco tarde para la fiesta, pero Krux ha creado un guión para esto, llamado github.com/krux/postscribe . Pudimos usar esto para superar este problema.