Не удается подключиться к локальному хосту с расширения Chrome
Я работаю над расширением Chrome, которое отслеживает время и использует Google App Engine для бэкэнд.
Для тестирования я пытаюсь подключить локальную версию расширения к локальной версии приложения App Engine. Когда я пытаюсь отправить запрос POST, я получаю:
XMLHttpRequest cannot load http://localhost:8080/report. Origin chrome-extension://mbndmimplohfkkcincjodnfpaapbbmei is not allowed by Access-Control-Allow-Origin.
Но он работает, когда я изменяю URL-адрес, чтобы он отправлял URL-адрес appspot.com.
Что такое Access-Control-Allow-Origin, и почему это мешает мне получать результаты от localhost?
Ответы
Ответ 1
Я считаю, что это связано с тем, что вы не можете делать вызовы на сервер, который не включен в раздел разрешений вашего манифеста. Раздел разрешений manifest.json должен выглядеть примерно так:
"permissions": [
"http://myapp.appspot.com/*",
"http://localhost/*"
]
Заметьте, я не тестировал это, но похоже, что вот почему ваша проблема исходит.
Ответ 2
вы не можете добавлять порты в разрешениях. Вы должны использовать порт 80 для расширений в манифесте разрешений. Обычно я запускаю nginx и маршрутизирую весь трафик с моих расширений на порт 80.
Ответ 3
Вы можете использовать пользовательские порты.
manifest.json
"permissions": ["http://localhost/*"]
background.js (используя jQuery)
$.post('http://localhost:5000/some-endpoint');
Ответ 4
Мне удалось заставить этот код работать:
var loginPayload = {};
loginPayload.username = document.getElementById('username').value;
loginPayload.password = document.getElementById('password').value;
console.log(loginPayload);
var callback = function (response) {
console.log(response);
};
var handle_error = function (obj, error_text_status){
console.log(error_text_status + " " + obj);
};
$.ajax({
url: 'https://127.0.0.1:8443/hello',
type: 'POST',
success: callback,
data: JSON.stringify(loginPayload),
contentType: 'application/json',
error: handle_error
});
EDIT:
Видимо кому-то это не понравилось, поэтому нужно помнить несколько вещей:
- Для расширений, которые должны работать на https, убедитесь, что ваш сервер обслуживает https.
- В отличие от сообщений выше, хром-расширения могут обслуживать порты, отличные от порта 80/443