Ошибка в Chrome: «Исходный файл: // не разрешен Access-Control-Allow-Origin» - PullRequest
0 голосов
/ 23 марта 2012

Я пишу коды для расширения Chrome, которому требуется доступ к minus.com, который использует oAuth 2.0 для аутентификации, поэтому я написал файл javascript 'test.js', а затем включил его в HTML-файл 'test.html' затем загрузите файл test.html в Chrome, чтобы проверить коды JavaScript, которые используются для аутентификации.

Структура 'test.js' выглядит следующим образом:

function Ajax(url, options) {

// some function content

    // Sending data
    if (options.method === "POST" && (options.params || options.binaryData)) {
        if (options.binaryData) {
            xhr.sendAsBinary(options.binaryData);
        } else {
            xhr.send(hashToQueryString(options.params));
        }
    } else {
        xhr.send(null);
    }

    return xhr;
}

function refreshToken(refresh_token) {
    var params = {
        'grant_type': 'refresh_token',
        'client_id': API_KEY,
        'client_secret': API_SECRET,
        'refresh_token': refresh_token,
        'scope': 'read_all modify_all upload_new'
    }

    new Ajax("https://minus.com/oauth/token", {
        params: params,

        onSuccess: function(response) {
            console.log(response.access_token);
        },

        onError: function(response) {
            console.log('error: wrong_token');
        }
    });               
}

refreshToken();

Когда я загрузил «test.html» в Chrome для проверки «test.js», он вызвал ошибку в консоли, сказав, что «XMLHttpRequest не может загрузить https://minus.com/oauth/token?... Исходный файл: // не разрешен Access-Control-Allow-Origin «. Я пытался запустить Chrome с опцией «--allow-file-access-from-files» или «--disable-web-security», но это не решило проблему. Однако, если я прокомментировал часть «Отправка данных» в функции «Ajax», ошибки не будет.

У кого-нибудь есть идеи, что здесь происходит?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

Чтобы быть более точным в своей проблеме: вам нужно добавить хосты, к которым вы хотите иметь доступ в кросс-домене, к вашему манифесту расширения:

http://code.google.com/chrome/extensions/xhr.html

{
  "name": "My extension",
  ...
  "permissions": [
    "https://*.minus.com/"
  ],
  ...
}

редактировать

В дополнение к этому, я иногда получаю странные междоменные ошибки в моем chrome, когда у меня активен МНОГО расширений. Затем я должен отключить хотя бы пару, обновить расширение, и оно работает - или иногда перезапустить Chrome.

1 голос
/ 23 марта 2012

Вы решаете эту проблему, превращая ваше приложение в пакетное приложение, которое поддерживает междоменные вызовы.Размещенные приложения этого не делают.

Возможно, вы также захотите прочитать Кросс-исходный XMLHttpRequest в расширениях Chrome

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