Estoy trasladando una de mis extensiones de Firefox a Chrome, y estoy teniendo un pequeño problema con una consulta de AJAX. El siguiente código funciona bien en la extensión FF, pero falla con un estado de "0" en Chrome.La llamada a jQuery.ajax falla dentro de la extensión de Chrome
function IsImage(url) {
var isImage = false;
var reImageContentType = /image\/(jpeg|pjpeg|gif|png|bmp)/i;
var reLooksLikeImage = /\.(jpg|jpeg|gif|png|bmp)/i;
if(!reLooksLikeImage.test(url))
{
return false;
}
var xhr = $.ajax({
async: false,
type: "HEAD",
url: url,
timeout: 1000,
complete : function(xhr, status) {
switch(status)
{
case "success":
isImage = reImageContentType.test(xhr.getResponseHeader("Content-Type"));
break;
}
},
});
return isImage;
}
Esta parte de la extensión comprueba lo que hay en el portapapeles (otro tema Chrome ya he resuelto), y si es una URL de la imagen, envía una petición HEAD y comprueba la respuesta "Content-Type" encabezado para asegurarse de que sea una imagen. De ser así, devolverá verdadero, pegando el texto del portapapeles en una etiqueta IMG. De lo contrario, si se ve como una URL normal que no es una imagen, la envuelve en una etiqueta A. Si no es una URL, solo hace un simple pegado.
De todos modos, la url que se comprueba es definitivamente una imagen, y funciona bien en FF, pero en la función completa, xhr.status es "0" y el estado es "error" cuando la función finaliza. Aumentar el tiempo de espera a 10 segundos no ayuda. He verificado las imágenes de prueba deben volver como "image/jpeg" cuando se ejecuta:
curl -i -X HEAD <imageURL>
también sé que debería usar el éxito y devoluciones de llamada de error en lugar de completo, pero que no funcionan bien. ¿Algunas ideas?
Que sea una restricción de seguridad en todas las peticiones AJAX de extensión? –
no debe 'devolver isImage;' ser parte de la devolución de llamada completa? – pixeline
@pixieline: puede ser. Eso era solo para tener un punto de retorno, pero ni siquiera llega tan lejos, porque el cambio (estado) es "error", por lo que nunca se llama a esa rama. –