Я портирую одно из моих расширений 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>
Я также знаю, что должен использовать обратные вызовы success и error вместо завершения, но они также не работают. Есть идеи?