Ответ 1
Проблема в том, что ответ JSONP улавливается фактической страницей, за исключением изолированного JavaScript-кода, который также ограничивает содержимое Chrome script.
jQuery17105683612572029233_1323808231542
- это имя функции обратного вызова, которая вызвана вызовом jQuery JSONP для конкретного вызова. Эта функция определяется в изолированной области, к которой имеет доступ контент script.
Единственное обходное решение, которое я знаю, которое работало для меня, - сделать вызов XHR из содержимого script. Начиная с Chrome 13 вы можете сделать XHR-вызовы междоменными из сценариев контента (довольно круто). В вашем файле манифеста вам нужно добавить внешний URL к разрешениям:
{
...
"permissions": [
"http://example.com"
]
}
Затем вы можете сделать вызов XHR следующим образом:
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://example.com/", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
//handle the xhr response here
}
}
xhr.send();
Вам нужно будет выполнить некоторые действия, которые jQuery делает для вас автоматически, например, кодирование значений объекта данных в URL-адрес XHR (в вашем случае "imrUrl" и "returnString" ), а также преобразование ответ от xhr.responeText или xhr.reponseXML в объект.
Недостатком этого подхода является то, что если вы используете этот код между расширением Chrome и чем-то другим (например, букмарклет), теперь у вас должна быть другая логика для случая использования Chrome.
Подробнее см.: Расширение Chrome XHR