2010-09-13 14 views
18

Tengo un que otros sitios pueden incluir para que sus usuarios puedan POST un formulario de regreso a mi sitio. Me gustaría manejar con agrado los casos en que mi sitio no funciona o mi servidor no puede servir el contenido (es decir, un tiempo de espera de respuesta o un error 4xx o 5xx). He intentado añadir un onError al objeto , pero eso no parece hacer nada:¿Cómo puedo manejar los errores al cargar un iframe?

showIFrame = function() { 
    var iframe = document.createElement('iframe'); 
    iframe.id = 'myIFrame'; 
    iframe.src = 'http://myserver.com/someURLThatFailsToLoad'; 
    iframe.onError = iframe.onerror = myHandler; 
    document.body.appendChild(iframe); 
}; 

myHandler = function(error) { 
    document.getElementById('myIFrame').style.display = 'none'; 
    console.error('Error loading iframe contents: ' + error); 
    return true; 
}; 

Si mi servidor devuelve un 404 apenas consigo el contenido de la página no se encuentra en mi . De hecho, ese controlador de errores nunca se dispara. ¿Hay alguna manera de hacer que esto funcione?

(Estoy probando en Chrome, pero me gustaría que funcione también para FF y IE> = 7.)

Respuesta

12

Para detectar si su servidor está caído o no, se puede incluir un vacío archivo de script de su propio dominio. Cuando el servidor está caído, el manejador onerror evento se disparará:

var el = document.createElement('script'); 
el.onerror = errorFunction; 
el.src = "somebogusscript.js?" + new Date().getTime(); 
document.body.appendChild(el); 

Nota: no se olvide de añadir una cadena aleatoria al atributo src para evitar el cliente utilizando una versión en caché (que podría detener un vistazo a el servidor en absoluto).

+1

lo siento, gran punto, aunque ya lo había explicado. Ver la actualización: 'iframe.onError = iframe.onerror = myHandler;' –

+0

La mayoría de los navegadores no permiten las solicitudes de XHR entre dominios. Esto es Javascript que proporciono a otros sitios. De hecho, las restricciones entre dominios de XHR HTTP son exactamente la razón por la que estoy usando un '