Get JSON in a Chrome extension
The CSP cannot cause the problem you've described. It's very likely that you're using JSONP instead of plain JSON. JSONP does not work in Chrome, because JSONP works by inserting a <script>
tag in the document, whose src
attribute is set to the URL of the webservice. This is disallowed by the CSP.
Provided that you've set the correct permission in the manifest file (e.g. "permissions": ["http://domain/getjson*"]
, you will always be able to get and parse the JSON:
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();
When using jQuery for ajax, make sure that JSONP is not requested by using jsonp: false
:
$.ajax({url:'...',
jsonp: false ... });
Or, when using $.getJSON
:
$.getJSON('URL which does NOT contain callback=?', ...);
Related videos on Youtube
user1175307
Updated on September 15, 2022Comments
-
user1175307 over 1 year
Small problem with my chrome extension.
I just wanted to get a JSON array from another server. But manifest 2 doesn't allow me to do it. I tried specify
content_security_policy
, but the JSON array is stored on a server without SSL cert.So, what should I do without using manifest 1?
-
user1175307 over 11 yearsThanks a lot, man! I don't know what happened, but it works without callback=? like a charm! It didn't work in the past, but now it's OK :-) So solved!
-
Gino over 7 yearsThe real first working exemple i found in the web on hours of search and try. If i Use: var json = this.response; i get it working. What is the difference than responseText ?