0

我正在尝试创建一个调用我的 rails 应用程序 api 的 chrome 扩展程序。目前api返回json并且工作正常,但是当我尝试将它构建到chrome扩展中时,它说:

由于内容安全策略,拒绝从“http://mysite.com/demo?q=hello?callback=jQuery16409466155741829425_1342489669670&_=1342489677171”加载脚本。

我查找了文档http://code.google.com/chrome/extensions/contentSecurityPolicy.html,听起来我不能这样做,除非我将我的网站实现为 https 版本。(在“放宽默认策略”部分)我不确定我是否理解正确,因此做出如此大的改变感觉很荒谬。我误解了吗?或者有解决方法吗?谢谢你。

4

2 回答 2

1

在 Chrome 扩展程序中,允许跨站点 XMLHttpRequests,前提是您在清单文件中定义源 - 请参阅http://code.google.com/chrome/extensions/xhr.html

JSONP 实现使用标签加载外部脚本<script>,并将其插入到文档中。除非源通过"content_security_policy"条目被列入白名单,否则当清单版本2 处于活动状态时不能使用 JSONP(不要使用清单 v1 来克服这个问题,因为它已被弃用,并且已经存在合适的替代方案)。

当您无法接收 JSON 响应而不是 JSONP 时,请使用普通请求获取数据,切断回调,然后解析它。例如:

// response is the response from the server
// Received through `XMLHttpRequest`, jQuery.ajax, or whatever you used
// cuts of jQuery....(  and the trailing )
response = response.replace(/^[^(]*\(/, '').replace(/\);?$/, '');
于 2012-07-17T11:05:08.983 回答
0

默认情况下,由于相同的来源策略,浏览器不允许这样做。

但是,您可以通过发出jsonp请求来解决此问题。

当您使用 jquery 时,使用getJSON方法超级容易

于 2012-07-17T02:03:11.947 回答