2010-01-20 9 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 '