处理由Chrome扩展程序引起的AJAX Origin错误

时间:2013-02-05 21:22:19

标签: ajax google-chrome jquery google-chrome-extension

有没有办法处理Chrome扩展程序中的AJAX Origin错误?

  

拒绝加载   镀铬的扩展://kldbdjcbjohfhddpicldkbifbkcdanid/data.json。   资源必须列在web_accessible_resources清单键中   为了通过扩展名以外的页面加载。

我试过了:

$.ajax({
    url: 'chrome-extension://kldbdjcbjohfhddpicldkbifbkcdanid/data.json',
    datatype: 'json',
    success: function(xhr) {
        alert('ok');
    },
   erro r: function(xhr, status, err) {
        alert('status: ' + xhr.status + ' - ' + err);
    }
});

但变量中没有任何东西。错误状态为“0”,错误消息为空。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用jsonp格式。这通常会解决跨源错误。

$.ajax({
    url: 'chrome-extension://kldbdjcbjohfhddpicldkbifbkcdanid/data.json',
    datatype: 'jsonp',
    success: function(xhr) {
        alert('ok');
    },
   erro r: function(xhr, status, err) {
        alert('status: ' + xhr.status + ' - ' + err);
    }
});

答案 1 :(得分:0)

听起来好像是在尝试根据错误从内容脚本加载此资源。

您必须通过web_accessible_resources在清单中明确添加单个扩展资源或与您的扩展资源匹配的模式。您的错误消息指出这是解决方案。

完成此操作后,您可以使用chrome.extension.getURL(resourcePath)构建网址。

以下是我的清单摘录:

"web_accessible_resources" : [
    "*.html"
]

这是我用来请求我的HTML模板文件的代码:

var url = chrome.extension.getURL("template.html");
$.get(url,function(data, textStatus, jqXHR){
    console.log("Got the template!");
    console.log(data);
},"html");