Tôi đang chuyển một trong các tiện ích mở rộng Firefox của mình sang Chrome và tôi đang gặp sự cố nhỏ với truy vấn AJAX. Mã sau hoạt động tốt trong phần mở rộng FF, nhưng không thành công với trạng thái "0" trong Chrome.Cuộc gọi jQuery.ajax không thành công trong phần mở rộng của 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;
}
Phần cụ thể này của tiện ích mở rộng kiểm tra nội dung trên clipboard (một vấn đề khác của Chrome) gửi yêu cầu HEAD và kiểm tra phản hồi "Kiểu nội dung" tiêu đề để chắc chắn đó là một hình ảnh. Nếu vậy, nó sẽ trả về true, dán văn bản clipboard vào thẻ IMG. Nếu không, nếu nó trông giống như một URL bình thường không phải là một hình ảnh, nó sẽ kết thúc nó trong một thẻ A. Nếu nó không phải là một URL, nó chỉ làm một dán đơn giản.
Dù sao, url được kiểm tra chắc chắn là hình ảnh và hoạt động tốt trong FF, nhưng trong chức năng đầy đủ, xhr.status là "0" và trạng thái là "lỗi" khi hàm hoàn tất. Tăng thời gian chờ lên 10 giây không giúp được gì. Tôi đã xác minh những hình ảnh kiểm tra nên trở lại là "image/jpeg" khi chạy:
curl -i -X HEAD <imageURL>
Tôi cũng biết tôi nên sử dụng sự thành công và callbacks lỗi thay vì hoàn thành, nhưng họ không làm việc, hoặc. Bất kỳ ý tưởng?
Có thể là giới hạn bảo mật đối với tất cả yêu cầu AJAX khỏi việc gia hạn không? –
không nên 'trả về isImage;' là một phần của cuộc gọi lại đầy đủ? – pixeline
@pixieline: Có thể. Đó là chỉ để có một điểm trở lại, nhưng nó thậm chí không nhận được rằng đến nay, bởi vì chuyển đổi (trạng thái) là "lỗi", do đó, chi nhánh không bao giờ được gọi là. –