Je suis en train de porter l'une de mes extensions Firefox sur Chrome, et je rencontre un petit problème avec une requête AJAX. Le code suivant fonctionne correctement dans l'extension FF, mais échoue avec un état "0" dans Chrome.L'appel jQuery.ajax échoue dans l'extension 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;
}
Cette partie de l'extension vérifie ce qui est le presse-papiers (un autre problème Chrome je l'ai déjà résolu), et si elle est une URL d'image, il envoie une requête HEAD et vérifie la réponse « Content-Type » en-tête pour être sûr que c'est une image. Si c'est le cas, il retournera vrai, en collant le texte du presse-papiers dans un tag IMG. Sinon, si elle ressemble à une URL normale qui n'est pas une image, elle l'enveloppe dans une balise A. Si ce n'est pas une URL, elle fait juste une pâte simple. Quoi qu'il en soit, l'URL vérifiée est définitivement une image, et fonctionne correctement dans FF, mais dans la fonction complète, xhr.status est "0", et l'état est "error" quand la fonction est terminée. Augmenter le délai d'attente à 10 secondes n'aide pas. Je l'ai vérifié les images de test devraient revenir comme « image/jpeg » lors de l'exécution:
curl -i -X HEAD <imageURL>
Je sais aussi que je devrais utiliser le succès et callbacks d'erreur au lieu de complet, mais ils ne fonctionnent pas non plus. Des idées?
Que ce soit une restriction de sécurité sur toutes les requêtes AJAX de extention? –
ne devrait pas 'return isImage;' faire partie du rappel complet? – pixeline
@pixieline: Ça peut l'être. C'était juste pour avoir un point de retour, mais ça ne va même pas aussi loin, parce que le commutateur (status) est "error", donc cette branche n'est jamais appelée. –