在Chrome扩展中获取JSON
我的Chrome扩展的小问题。
我只是想从另一台服务器获取JSON数组。 但是舱单2不允许我这样做。 我试过指定content_security_policy
,但是JSON数组存储在没有SSL证书的服务器上。
那么,我应该怎么做,而不使用清单1?
CSP不会导致您所描述的问题。 这很可能是您使用JSONP而不是普通的JSON。 JSONP在Chrome中不起作用,因为JSONP通过在文档中插入一个<script>
标记来工作,该标记的src
属性被设置为web服务的URL。 这是CSP不允许的 。
假设你已经在清单文件中设置了正确的权限(比如"permissions": ["http://domain/getjson*"]
,你总能得到并parsingJSON:
var xhr = new XMLHttpRequest(); xhr.onload = function() { var json = xhr.responseText; // Response json = json.replace(/^[^(]*\(([\S\s]+)\);?$/, '$1'); // Turn JSONP in JSON json = JSON.parse(json); // Parse JSON // ... enjoy your parsed json... }; // Example: data = 'Example: appended to the query string..'; xhr.open('GET', 'http://domain/getjson?data=' + encodeURIComponent(data)); xhr.send();
当使用jQuery for ajax时,请确保使用jsonp: false
不要求JSONP jsonp: false
:
$.ajax({url:'...', jsonp: false ... });
或者,使用$.getJSON
:
$.getJSON('URL which does NOT contain callback=?', ...);