Междоменная ошибка при вызове API сайта из JavaScript в расширении Chrome - PullRequest
5 голосов
/ 20 декабря 2011

Я работаю над небольшим расширением Chrome, которое будет вызывать API Remember the Milk. У Google есть хороший пример , использующий API Flikr, и я использую его в качестве основы для своего расширения. Их пример отлично работает в моем браузере (последняя версия Chrome для Linux).

Когда я меняю имена методов и ключ API Remember the Milk, я получаю следующую ошибку:

XMLHttpRequest cannot load http://api.rememberthemilk.com/services/rest/?method=rtm.test.echo&api_key=xxxxxxxxxxxxxxxxxxxxxx&name=Test%20task. 
Origin chrome-extension://lifnmciajdfhj is not allowed by Access-Control-Allow-Origin.

Мой код выглядит так:

    var req = new XMLHttpRequest();
    req.open(
            "GET",
            "http://api.rememberthemilk.com/services/rest/?" +
            "method=rtm.test.echo&" +
            "api_key=xxxxxxxxxxxxxxxxxxxxxxxxxx&" +
            "name=Test%20task", 
            true);
    req.onload = onResponseReceived;
    req.send(null);

    function onResponseReceived() {
        console.log("It worked.");
    }

Есть предложения?

Ответы [ 2 ]

9 голосов
/ 20 декабря 2011

И ... решено, как обычно, через пару минут после публикации здесь.Проблема заключалась в файле manifest.json, в котором изначально были разрешения Flikr API.Я обновил их так, чтобы они указывали на Remember the Milk, но, видимо, вам нужно удалить и переустановить расширение для перерегистрации разрешений.

У Google есть хороший учебник по XHR в расширениях .

Вот обновленный manifest.json.Может быть, это будет полезно для кого-то еще.

    {
        "name": "Remember the Milk",
        "version": "1.0",
        "description": "A Remember the Milk extension.",
        "browser_action": {
            "default_icon": "rtm.png",
            "popup": "popup.html"
        },
        "permissions": [
            "http://*.rememberthemilk.com/",
            "https://*.rememberthemilk.com/"
        ]
    }
0 голосов
/ 02 марта 2016

Убедитесь, что он разрешен со стороны сервера с помощью заголовка

//header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
// or
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true");
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description');

А также убедитесь, что на вашем домене включено перенаправление www или non-www.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...