2010-01-20 12 views
9

¿Es de alguna manera posible detener la carga de una etiqueta de script después de que se haya agregado al encabezado de un documento HTML?¿Es posible detener una etiqueta de script insertada dinámicamente?

me gustaría tener algo como esto:

var script_tag = document.createElement('script'); 
script_tag.setAttribute('type', 'text/javascript'); 
script_tag.setAttribute('src', 'http://fail.org/nonexistant.js'); 
document.getElementsByTagName('head')[0].appendChild(script_tag); 

// something like this!!! 
script_tag.abort(); 
+1

¿por qué le gustaría hacer esto? – roryf

+1

¿Has probado 'head.removeChild (script_tag);'? No estoy seguro de si funcionaría bien. – Amarghosh

+1

@Rory Fitzpatrick: Desde el punto de vista de él, quiere abortar la descarga de un script si tarda demasiado tiempo en obtenerlo de una fuente externa. –

Respuesta

3

que no es posible de ningún modo multi-navegador. Tan pronto como la etiqueta de script se agregue al encabezado, se descargará y analizará, e incluso eliminar el nodo no lo detendrá.

Dicho esto, Firefox tiene document.onbeforescriptexecute, que es cancelable (donde la acción predeterminada sería ejecutar el script de destino). Este evento originalmente estaba en una pista de estándares pero se eliminó recientemente de la especificación HTML debido a la falta de casos de uso válidos.

3

No, no puedes hacer esto de esta manera. Pero puede hacerlo si lo carga a través de XMLHTTPRequest (AJAX). De esta forma puede cancelar la conexión si tarda demasiado.
Por ejemplo, usted puede utilizar timeout opción si utiliza jQuery:

$.ajax({ url: "a.js", dataType: "script", timeout: 1000}); 

De esta manera si la escritura no se carga dentro de 1 segundo (1000 ms) solicitud serán abortados. También puede usar {async:false} para evitar la ejecución del código mientras se carga el script (si es necesario).

Compruebe http://api.jquery.com/jQuery.ajax/ para más opciones.

+1

Gracias por la respuesta, pero eso no siempre funciona debido a restricciones de dominios cruzados. –

+0

¿Qué pasa con 'jsonp'? De esta manera puedes hacer crossdomain. Pero asegúrese de confiar en ese dominio. – NilColor

+3

JSONP es solo una inyección dinámica de etiqueta '

  • 11. ¿Es posible eliminar dinámicamente la etiqueta meta refresh del encabezado usando jQuery?
  • 12. ¿Es posible teñir varias veces una etiqueta en Silverlight?
  • 13. ¿Es posible detener cin de la entrada de espera?
  • 14. ¿Es posible detener las solicitudes de "lectura" del Backbone?
  • 15. ¿Es posible detener ObjectDataSource de la vinculación automática?
  • 16. ¿Es posible detener la recolección de basura .NET?
  • 17. ¿Cómo establecer una CSSClass para una etiqueta generada dinámicamente?
  • 18. Detener la ejecución del script de Ruby
  • 19. ¿Es posible compilar dinámicamente y ejecutar fragmentos de código C#?
  • 20. En rieles ¿es posible cargar el diseño de clase dinámicamente?
  • 21. ¿Es posible pasar una variable a un archivo de script FTP de Windows?
  • 22. Etiqueta de script en cadena de JavaScript
  • 23. ¿Cuál es la diferencia entre la etiqueta de script y la etiqueta "<%....%>"?
  • 24. desaparecidos $ insertada
  • 25. colocación de etiqueta de script HTML?
  • 26. Shell script para detener un programa java
  • 27. ¿Es posible crear dinámicamente variables locales en Python?
  • 28. ¿Es incorrecto colocar la etiqueta <script> después de la etiqueta</body>?
  • 29. ¿Es posible devolver dinámicamente un certificado SSL en NodeJS?
  • 30. ¿Es posible establecer dinámicamente RequestMappings en Spring MVC?