Не удается подключиться к локальному хосту из расширения Chrome - PullRequest
13 голосов
/ 06 октября 2011

Я работаю над расширением Chrome, которое отслеживает время и использует Google App Engine для бэкэнда.

Для тестирования я пытаюсь подключить локальную версию расширения к локальной версииApp Engine приложение.Когда я пытаюсь отправить запрос POST, я получаю:

XMLHttpRequest cannot load <a href="http://localhost:8080/report">http://localhost:8080/report</a>. Origin chrome-extension://mbndmimplohfkkcincjodnfpaapbbmei is not allowed by Access-Control-Allow-Origin.

Но это работает, когда я изменяю URL, чтобы он отправлял сообщения на URL appspot.com.*

Что такое Access-Control-Allow-Origin и почему он мешает мне получать результаты от localhost?

Ответы [ 4 ]

24 голосов
/ 06 октября 2011

Я считаю, что это потому, что вы не можете звонить на сервер, который не включен в раздел разрешений вашего манифеста. Раздел разрешений файла manifest.json должен выглядеть примерно так:

"permissions": [
    "http://myapp.appspot.com/*",
    "http://localhost/*"
]

Обратите внимание, я не проверял это, но, похоже, именно отсюда ваша проблема.

3 голосов
/ 06 июля 2016

Вы можете использовать пользовательские порты.

manifest.json

"permissions": ["http://localhost/*"]

background.js (используяjQuery)

$.post('http://localhost:5000/some-endpoint');
2 голосов
/ 06 октября 2011

вы не можете добавлять порты в разрешениях.Вы должны использовать порт 80 для расширений в манифесте разрешений.Я обычно запускаю nginx и маршрутизирую весь трафик с моих расширений на порт 80.

0 голосов
/ 04 февраля 2016

Мне удалось заставить этот код работать:

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
});

РЕДАКТИРОВАТЬ:
Очевидно, кому-то это не понравилось, поэтому следует помнить несколько вещей:

  1. Для расширений, которые должны работать по https, убедитесь, что ваш сервер обслуживает https.
  2. В отличие от постов выше, хромированные расширения МОГУТ обслуживать порты, отличные от порта 80/443
...