Я должен сделать междоменный запрос в хромовом расширении. Я знаю, что могу он через передачу сообщений, но я придерживался бы просто идиом jQuery (таким образом, мой JavaScript может также работать a ).
Я делаю нормальное:
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", function(data) {
console.log(data);
});
но в ошибочной консоли я вижу:
Uncaught ReferenceError: jsonp1271044791817 is not defined
Разве jQuery не вставляет функцию обратного вызова правильно в документ? Что я могу сделать для создания этой работы?
(Если я вставляю код в хромовую консоль, он хорошо работает, но если я поместил его, как page.js в расширении - когда проблема появляется.)
Увы, ничего из этого не сработало, поэтому я закончил тем, что сделал связь через background.html.
background.html
<script src="http://code.jquery.com/jquery-1.4.2.js"></script>
<script>
function onRequest(request, sender, callback) {
if (request.action == 'getJSON') {
$.getJSON(request.url, callback);
}
}
chrome.extension.onRequest.addListener(onRequest);
</script>
javascripts/page.js
chrome_getJSON = function(url, callback) {
console.log("sending RPC");
chrome.extension.sendRequest({action:'getJSON',url:url}, callback);
}
$(function(){
// use chrome_getJSON instead of $.getJSON
});
Если вы укажете "api.flickr.com" в файле manifest.json , вам не нужно будет использовать обратный вызов JSONP, стиль внедрения сценария для междоменного запроса.
Например:
"permissions": ["http://api.flickr.com"],
Это должно прекрасно работать в вашем коде. Я бы удалил параметр строки запроса «& jsoncallback», поскольку работа с JSONP не требуется.
Причина, по которой ваш текущий код не работает, заключается в том, что ваш код внедряется в страницы DOM, сценарии содержимого имеют доступ к DOM, но не имеют доступа к контексту javascript, поэтому нет метода для вызова обратного вызова.
Синтаксис немного неправильный. Нет необходимости в callback(
бите. Это работает безупречно. Проверено в консоли javascript в Chrome на этой странице StackOverflow (которая включает jQuery):
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", function(data) {
console.log(data);
});