a través de @jpdevries en un comentario sobre 1039
Hablando del respaldo de document.write () (que creo que gobierna), ¿qué pasa con esto?
Chrome ya no cargará scripts que se inserten a través de document.write () cuando la conexión de red sea lenta
https://developers.google.com/web/updates/2016/08/removing-document-write¿Ya se ha debatido cómo responder a esto?
Todavía no, pero gracias por informarnos sobre esto.
Aquí están las partes interesantes del documento vinculado
Con estos datos en mente, el equipo de Chrome ha anunciado recientemente la intención de intervenir en nombre de todos los usuarios cuando detectemos este patrón incorrecto conocido cambiando cómo se maneja document.write () en Chrome (ver estado de Chrome). Específicamente, Chrome no ejecutará el
Gracias por abrir el número @roblarsen. Me he estado preguntando si tal vez agregar defer
a todos los scripts incluidos resolvería esto.
Los scripts con los atributos 'async' o 'diferir' aún se ejecutarán.
Algo como
<script defer src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script defer>window.jQuery || document.write('<script defer src="js/vendor/jquery-1.12.4.min.js"><\/script>')</script>
<script defer src="js/plugins.js"></script>
<script defer src="js/main.js"></script>
La
<script defer>window.jQuery || document.write('<script defer src="js/vendor/jquery-1.12.4.min.js"><\/script>')</script>
es como una especie de defer
inicio. Parece funcionar, pero no estoy seguro de si es correcto.
Hm ... o tal vez los scripts de jquery podrían ser asíncronos y el plugin y los scripts principales se aplazan. Necesito asegurarse de que se carguen después de jQuery, por supuesto.
@jpdevries Creo que reescribir el script de inclusión para usar una interfaz DOM moderna (parentNode.insertBefore) como la que usa Google Analytics también sería algo a tener en cuenta.
Discusiones relacionadas sobre esto que pueden ayudar a tomar la decisión:
@FagnerMartinsBrack Gracias por los enlaces. Tu propio hilo en reddit ayudó a aclarar las cosas. Mientras exista una condición de origen cruzado, no tenemos nada de qué preocuparnos.
Una estrategia de aplazamiento es la mejor opción en mi opinión. No me gusta el async en absoluto, para scripts que deben estar listos lo antes posible como jQuery. He sugerido una implementación a más largo plazo en el hilo de WICG / intervenciones ...
@jpdevries Dos cosas con su código '
<script>
s en línea ha sido obsoleto por WHATWG. La pobre razón insuficiente que se dio fue que nadie lo usó ... Verdadera historia lamentable, pero lamentablemente sucedió ... Así que defer
inception no funcionará. :(defer
es principalmente esperar que el uso de IE10 muera.@hexalys 😭 He estado usando el inicio diferido para cosas como CDN de estilo h5bp con respaldo local o detección de características antes de incluir algo como un polyfill. ¡Eso es un fastidio!
¡Clausura! ¡Estaban a salvo!
@roblarsen oh eso es genial! ¿Chrome revirtió su decisión? Tengo curiosidad por saber por qué estamos a salvo porque realmente ❤️ este patrón
@jpdevries Solo se activa cuando la solicitud es de origen cruzado, así que estamos bien. Después de todo, es una alternativa local.