我正在将我的一个 Firefox 扩展移植到 Chrome,但我遇到了一个 AJAX 查询的小问题。以下代码在 FF 扩展程序中运行良好,但在 Chrome 中以“0”状态失败。
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;
}
扩展程序的这个特定部分检查剪贴板上的内容(我已经解决的另一个 Chrome 问题),如果它是图像 URL,它会发送 HEAD 请求并检查“Content-Type”响应标头以确保它是图像. 如果是这样,它将返回 true,将剪贴板文本粘贴到 IMG 标记中。否则,如果它看起来像不是图像的普通 URL,它会将其包装在 A 标记中。如果它不是一个 URL,它只是做一个简单的粘贴。
无论如何,被检查的 url 肯定是一个图像,并且在 FF 中可以正常工作,但是在完整的函数中,xhr.status 为“0”,并且当函数完成时状态为“错误”。将超时时间增加到 10 秒并没有帮助。我已经验证了测试图像在运行时应该以“image/jpeg”的形式返回:
curl -i -X HEAD <imageURL>
我也知道我应该使用成功和错误回调而不是完成,但它们也不起作用。有任何想法吗?