У меня проблема, аналогичная этому другому вопросу о SO, "XMLHttpRequest не работает в упакованном веб-приложении Google Chrome". Однако выбранный ответ не работает для меня. У меня есть URL-адрес, который я пытаюсь запросить, указанный в разрешениях манифеста. У меня есть ощущение, что это связано с предотвращением межсайтового скриптинга, о чем я читал в XMLHttpRequest и документы Встроить контент для Chrome.
Когда я проверяю ответ, все пусто, нет кода status
, нет response
, нет statusText
, точно так же, как это происходит при попытке сделать запрос между доменами, как в XSS, как показано в этом вопросе SO: Пустой текст ответа из XMLHttpRequest.
Вот мой манифест:
{
"manifest_version" : 2,
"name": "{name}",
"description" : "{description}",
"version" : "0.1",
"minimum_chrome_version": "23",
"permissions": [
"idle",
"storage",
"notifications",
"https://prefix.domain.suffix/*",
"https://prefix.domain.suffix/sub/"
],
"app": {
"background": {
"scripts": ["models.js", "background.js"]
}
},
"icons": { "16": "icon-16.png", "128": "icon-128.png" }
}
Я использую эту функцию для выполнения запросов:
function xhr(url, callback){
var timeout= 2000;
var xhr = new window.XMLHttpRequest();
xhr.ontimeout = function () {
console.error("The request for " + url + " timed out.");
};
xhr.onerror = function(){
console.error("error: "+xhr.statusText);
}
xhr.onload = function() {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
window.console.log("response: "+xhr.response);
callback(JSON.parse(xhr.response));
} else {
console.error(xhr.statusText);
}
}
};
xhr.open("GET", url, true);
xhr.timeout = timeout;
xhr.send(null);
}
URL-адрес, который я пытаюсь запросить, довольно простой, с некоторыми параметрами строки запроса, добавленными в конце, и выглядит следующим образом:
https://prefix.domain.suffix/sub/serve.aspx?param1=val1¶m2=val2
Который при загрузке в браузере возвращает простой и корректный JSON:
{
"ret" : [
{ "date": 1380603600000, "foo": bar1 },
{ "date": 1380776400000, "foo": bar2 }
]
}
Функция, которую я использую для тестирования в консоли разработчика, такова:
xhr('https://prefix.domain.suffix/sub/serve.aspx?param1=val1¶m2=val2', function(e){ console.log(e); });
В консоль выводится только error:
, а xhr
в этот момент:
XMLHttpRequest {statusText: "", status: 0, response: "", responseType: "", responseXML: null…}
Еще одна вещь, которую, возможно, необходимо учитывать, заключается в том, что этот URL-адрес, который я запрашиваю, находится за аутентификацией на моем сервере. Я вошел в систему и могу получить доступ к странице, независимо от того, какую вкладку я использую, поэтому я не думаю, что это проблема, но она все же может быть.
xhr
был бы какой-то код состояния? - person Kyle Falconer   schedule 05.10.2013