Sto eseguendo il porting di una delle mie estensioni di Firefox su Chrome e sto riscontrando un piccolo problema con una query AJAX. Il seguente codice funziona bene nell'estensione FF, ma non riesce con uno stato di "0" in Chrome.jQuery.ajax chiamata fallita all'interno dell'estensione 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;
}
questa particolare parte del prolungamento controlla cosa c'è nella clipboard (un altro problema Chrome ho già risolto), e se si tratta di un collegamento ad un'immagine, si invia una richiesta HEAD e verifica la risposta "Content-Type" intestazione per essere sicuri che sia un'immagine. In tal caso, restituirà true incollando il testo degli appunti in un tag IMG. Altrimenti, se assomiglia ad un normale URL che non è un'immagine, lo avvolge in un tag A. Se non è un URL, fa semplicemente una semplice incolla.
In ogni caso, l'url da verificare è sicuramente un'immagine e funziona bene in FF, ma nella funzione completa, xhr.status è "0" e lo stato è "errore" quando la funzione viene completata. Aumentare il timeout a 10 secondi non aiuta. Ho verificato le immagini di prova dovrebbero tornare come "image/jpeg" durante l'esecuzione:
curl -i -X HEAD <imageURL>
so anche che dovrebbe usare il successo e callback di errore invece di completo, ma non funzionano neanche. Qualche idea?
Possa essere una restrizione di sicurezza su tutte le richieste AJAX di estensione? –
non dovrebbe 'return isImage;' essere parte del callback completo? – pixeline
@pixieline: Può essere. Quello era solo per avere un punto di ritorno, ma non arriva nemmeno lontano, perché lo switch (status) è "error", quindi quel ramo non viene mai chiamato. –