Вопрос
Я получаю Error 407 'Proxy authentication required
'при выполнении перекрестного запроса XMLHttpRequest на фоновой странице моего расширения Google Chrome.
У меня Chrome настроен на использование HTTP-прокси, для которого требуется имя пользователя и пароль (обычная аутентификация).
Приведенный ниже код работает, если у меня не установлен прокси в Chrome (как и ожидалось).
Когда я впервые открываю Chrome, он запрашивает мои учетные данные прокси-сервера, которые я ввожу, и запоминает до конца сеанса.
Я предполагаю, что расширение находится в своем собственном процессе и поэтому не имеет учетных данных для прокси-сервера.
Мой вопрос: есть ли способ обойти это? Есть ли способ заставить XMLHttpRequest работать в фоновом скрипте расширения, независимо от того, какие настройки прокси установлены в браузере Chrome?
Я запускаю Chrome с chrome.exe --proxy-server=my.proxy.server:3128
в Windows, если это актуально.
Пример кода
manifest.json
{
[...]
"background_page": "background.html",
"permissions": [
"http://example.org/",
"http://mysite.com/"
],
"content_scripts": [
{
"matches": [
"http://example.org/*"
],
"js": ["contentscript.js"]
}
]
}
background.html-> background.js:
function getById(request, sender, sendResponse) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(data) {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
sendResponse(JSON.parse(xhr.responseText));
}
else {
// xhr.status == 407 here
sendResponse(null);
}
}
}
var url = 'http://mysite.com/script.php?id=' + request.id;
xhr.open('GET', url, true);
xhr.send();
}
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if ( request.action == 'getById' ) {
getById(request, sender, sendResponse);
}
else {
sendResponse(null);
}
});
contentscript.js:
chrome.extension.sendRequest({
'action': 'getById',
'id': 42
}, function(response) {
alert(response)
});