Проблема заключается в том, что ответ JSONP перехватывается фактической страницей за пределами изолированного кода JavaScript, который сценарий содержимого Chrome ограничивает вас тоже.
jQuery17105683612572029233_1323808231542
- это имя функции обратного вызова, которую JQuery JSONP динамически генерирует для конкретного вызова. Эта функция определяется в изолированной области, к которой у скрипта контента есть доступ.
Единственный известный мне обходной путь, который сработал для меня, - это сделать вызов XHR из скрипта контента. Начиная с 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