我正在將我的一個Firefox擴展移植到Chrome,並且遇到了AJAX查詢的一個小問題。以下代碼在FF擴展中正常工作,但在Chrome中失敗,狀態爲「0」。Chrome擴展內部的jQuery.ajax調用失敗
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的問題我已經解決了),如果它是一個圖片的網址,它發送一個HEAD請求,並檢查「的Content-Type」響應頭部以確保它是一個圖像。如果是這樣,它會返回true,將剪貼板文本粘貼到IMG標籤中。否則,如果它看起來像一個不是圖像的普通URL,它將它包裝在A標籤中。如果它不是一個URL,它只是做一個簡單的粘貼。
無論如何,被檢查的URL絕對是一個圖像,並且在FF中工作正常,但在完整函數中,xhr.status爲「0」,當函數完成時狀態爲「error」。將超時時間設置爲10秒無助。我已經驗證運行時,測試圖像應該回來「圖像/ JPEG」:
curl -i -X HEAD <imageURL>
我也知道我應該用成功和錯誤回調,而不是完整的,但他們不工作的。有任何想法嗎?
它可能是所有擴展的AJAX請求的安全限制嗎? – 2009-12-23 20:43:47
不應'返回isImage;'成爲完整回調的一部分? – pixeline 2009-12-23 20:45:46
@pixieline:可以。這只是爲了有一個返回點,但它甚至沒有達到那麼遠,因爲switch(status)是「錯誤」,因此分支從不被調用。 – 2009-12-23 20:47:35