0

我想创建一个调用我的Rails应用程序的api的Chrome扩展。目前api返回json并且工作正常,但是当我尝试将其构建为Chrome扩展时,它说:不可能在Chrome扩展中跨站点ajax api调用?

拒绝从'http://mysite.com/demo?q=hello' ?回调= jQuery16409466155741829425_1342489669670 & _ = 1342489677171'由于内容安全策略。

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

回答

0

默认浏览器不允许因为same origin policy这一点。

但是你可以通过一个jsonp要求解决这个问题。

当你使用jQuery这个超级容易getJSON方法

+0

对不起,我想我需要澄清我的问题。我已经在使用jsonp,这就是为什么它是基于网页的调用。但是,当我尝试把它扩展到铬扩展它不起作用... – Vlad 2012-07-17 02:42:33

+0

只是因为你正在返回JSON,并不意味着你正在做一个JSON-P请求。发布一些代码。 – 2012-07-17 09:24:52

1

在Chrome扩展,跨站点XMLHttpRequest的允许,前提是定义在清单文件的源 - 见http://code.google.com/chrome/extensions/xhr.html

一个JSONP实现加载使用<script>标签外部脚本,并将其插入到文档中。除非源通过"content_security_policy"条目列入白名单,JSONP时不能manifest version 2有效(做使用清单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(/\);?$/, ''); 
+0

参见http://stackoverflow.com/questions/11842954/get-json-in-chrome-plugin/11845618#11845618(特别是如果你使用jQuery) – 2013-08-14 22:56:54