2011-04-11 17 views
5

Estoy insertando una etiqueta script en el DOM como tal (piensa JSONP):¿Qué encabezados/respuestas HTTP activan el controlador "onerror" en una etiqueta de script?

var s = document.createElement('script'); 
s.src = "http://abc.com/js/j.js"; 
s.onerror = function() { 
    alert("Error loading script tag!"); 
}; 
document.getElementsByTagName('head')[0].appendChild(s); 

Ahora, sé una respuesta 404 de abc.com para el script de arriba daría lugar a ese evento ... ¿Qué otras cabeceras/las respuestas causarían que la etiqueta script arrojara un error? Me imagino que varía un poco el navegador, pero si alguien tiene algún tipo de lista que sería muy útil.

Gracias!

+1

Cuando creo y me refiero un archivo PHP en el cual Establecí el código de respuesta en 404, el 'onerror' no se dispara, mientras que al referirme a un archivo que simplemente no existe arroja' onerror'. – pimvdb

+0

Actualización: puede ser porque 'Content-length' todavía se envía en mi archivo PHP, pero parece que no puede eliminarlo. – pimvdb

Respuesta

7

4xx y 5xx deben dar como resultado un error, al menos se definen como códigos de error.

[edit] Acabo de probarlo en Fx 3.5 - esa es la afirmación correcta.

Aquí está el código de prueba si desea probar otros navegadores (rápidos y sucios ...)

var codes = [100, 101, 102, 122, 200, 201, 202, 203, 204, 205, 206, 207, 226, 300, 301, 302, 303, 304, 305, 306, 307, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410], 411, 411, 412, 413,414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 444, 449, 450, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510 ]; 

      $(codes).each(function() { 
       var s = document.createElement('script'); 
       s.src = "http://localhost/test.php?code="+this; 
       var cd = this; 
       s.onerror = function() { 
        document.write(cd+',') 
       }; 
       document.getElementsByTagName('head')[0].appendChild(s); 

      }); 

y PHP código:

<?php header('HTTP/1.0 '.$_GET['code'].' OK'); ?> 
+1

Esto solo causa un error para '407' en mi entorno de Chrome/Apache. – pimvdb

+0

Esto es lo que me pasa con el código anterior en Firefox: '300.301.302.303.304.305.306.307.400.401.402.403.404.405.406.407.409.410,' '408.411.412.413.414.415.416.417.418.419.420.421.422.423.424.425.426,' '444.449.450.499.500.501.502.503.504.505.506.507.508.509.510.411,' Pero el 3xx debe ser porque no proporcionan una ubicación cabecera –

+0

Sí, en Firefox se tiran más errores. Sin embargo, no estoy seguro de por qué. De acuerdo con las especificaciones, 'onerror' debe dispararse cuando hay 'un error' durante la carga. Supongo que depende del navegador cómo se interpreta esto. http://dev.w3.org/html5/spec/scripting-1.html#script – pimvdb

Cuestiones relacionadas