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

标签 javascript jquery google-chrome google-chrome-extension

我正在将我的一个 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”响应 header 以确定这是一个图像。如果是这样,它将返回 true,将剪贴板文本粘贴到 IMG 标记中。否则,如果它看起来像一个不是图像的普通 URL,它会将其包装在 A 标签中。如果它不是 URL,它只是进行普通粘贴。

无论如何,被检查的url肯定是一个图像,并且在FF中工作正常,但在完整的函数中,xhr.status是“0”,函数完成时status是“error”。将超时时间增加到 10 秒无济于事。我已经验证测试图像在运行时应该返回为“image/jpeg”:

curl -i -X HEAD <imageURL>

我也知道我应该使用成功和错误回调而不是 complete,但它们也不起作用。有什么想法吗?

最佳答案

正如您对 Chris 的理解,在内容脚本中,您不能执行任何跨域 XHR。您必须在扩展页面(如背景、弹出窗口或什至选项)中执行它们。

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

关于xhr限制的更多信息,请引用: http://code.google.com/chrome/extensions/xhr.html

关于javascript - jQuery.ajax 调用在 Chrome 扩展中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1955199/

相关文章:

javascript - for循环中实例化的多个回调的访问索引

javascript - 自定义推文按钮不发送文本

node.js - 对 JavaScript 文件的更改不会立即生效。 gulp browserify 任务可能存在问题

javascript - 如果单击其他按钮而不保存编辑,JQuery 会发出警告

javascript - jQuery 代码不适用于 Firefox

ajax - AJAX使Chrome崩溃

javascript - 在谷歌浏览器的检查元素中显示的 == $0 是什么意思对于所选元素

asp.net - Javascript 警报测试不起作用

javascript - 如果该页面有必要加载 js/css

jquery - 如何使用 jquery 检查特定类的所有复选框是否已禁用?