javascript – jQuery.ajax调用在Chrome扩展中失败

前端之家收集整理的这篇文章主要介绍了javascript – jQuery.ajax调用在Chrome扩展中失败前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在将我的一个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>

我也知道我应该使用成功和错误的回调而不是完整的,但是它们也不起作用.有任何想法吗?

解决方法

正如您在“内容脚本”中所述,您无法做任何跨域XHR.您必须在扩展页面(如背景,弹出式窗口,甚至选项)中执行此操作.

有关内容脚本限制的更多信息,请参阅:
http://code.google.com/chrome/extensions/content_scripts.html

有关xhr限制的更多信息,请参阅:
http://code.google.com/chrome/extensions/xhr.html

猜你在找的Ajax相关文章