Не удается отправить междоменный AJAX из панели

Я делаю надстройку Firefox и с панели надстроек Firefox пытаюсь сделать запрос AJAX на сайт.

Это то, что у меня есть до сих пор:

package.json

{
  //[...]
  "permissions": {
    "cross-domain-content": ["http://www.website.com", "https://www.website.com"]
  }
}

main.js

var data = require("sdk/self").data;

var extension_panel = require("sdk/panel").Panel({
  contentURL: data.url("menu.html"),
  contentScriptFile: data.url("menu.js")
});
//[...]

menu.js

//[...]
$.ajax({
    type: "GET",
    url: "https://www.website.com/currentUser",
    success: function(e){
        $("#loading").hide();
    },
    error: function(e){
        $("#loading").hide();
        if (e.status == 401){
            show_login();
            return;
        }
        show_login();
        $("#login-error").text("Couldn't check login status!").show();
    }
});
//[...]

Каждый раз, когда я запускаю этот аддон, он продолжает выдавать сообщение Couldn't check login status!. Когда я регистрирую объект ошибки, status равно 404, а statusText равно "error".

Я думаю, что у меня все правильно настроено в package.json, так почему же аддон не позволяет мне сделать запрос AJAX?

ИЗМЕНИТЬ

404 в данном случае не означает, что URL не существует. В версии этого самого расширения для Chrome все работает нормально, поэтому я знаю, что веб-сайт не изменился в последнюю минуту.


person Ivan    schedule 25.10.2014    source источник
comment
@dandavis Да, но в версии этого самого аддона для Chrome URL работает нормально.   -  person Ivan    schedule 26.10.2014
comment
также могут потребоваться дополнительные заголовки. Проверить документы API   -  person charlietfl    schedule 26.10.2014
comment
@charliefl Какие заголовки? Веб-сайт сделан так, чтобы возвращать 200, когда пользователь входит в систему, и 401 для каждого другого запроса.   -  person Ivan    schedule 26.10.2014
comment
Похоже, вы используете jquery. Таким образом, ajax исходит не от фоновой страницы (жаргон google chrome ext dev), а исходит из самой страницы, что, конечно, не позволяет междоменный xhr. вам придется использовать xhr из области, отличной от contentScript, это должно работать. я не знаком с addon sdk, поэтому я не уверен, как работает cross-domain-content в package.json, но я добавил тег sdk, который должен дать вам лучшие ответы   -  person Noitidart    schedule 26.10.2014
comment
@dandavis Я уже выполнил отладку. Ничего полезного не обнаружилось.   -  person Ivan    schedule 26.10.2014
comment
@Noitidart AJAX также не появился на фоновой странице Chrome. Это было прямо во всплывающем окне. Что касается выполнения XHR из области действия, отличной от contentScript, я обдумывал это, но сначала хочу решить эту головоломку.   -  person Ivan    schedule 26.10.2014
comment
Давайте подождем, пока эксперты SDK ответят на этот вопрос. Однако, если вы хотите использовать область действия, отличную от contentScript, вот функция, с помощью которой это можно сделать: stackoverflow.com/questions/25109620/ просто замените var {Cu: utils, Cc: classes, Ci: instances} = Components; на const { Ci, Cu, Cc, Cr } = require('chrome');   -  person Noitidart    schedule 26.10.2014
comment
@Noitidart Я уже знаю, как сделать XHR Addon SDK, но все равно спасибо.   -  person Ivan    schedule 26.10.2014
comment
просто странно, что веб-сайт должен возвращать 401 или 200, а вы получаете 404. если вызов был заблокирован, вы не получите 404, вы получите ноль... поэтому я думаю, что это что-то простое.   -  person dandavis    schedule 26.10.2014
comment
@dandavis Я посмотрю на это еще через несколько минут. Может быть, так работает Firefox, я действительно не знаю.   -  person Ivan    schedule 26.10.2014
comment
Обычная ванильная XMLHttpRequest дает тот же результат? jQuery включен с тегом script?   -  person paa    schedule 26.10.2014
comment
@paa На самом деле я провел дополнительное тестирование и узнал, что если я запускаю расширение в SDK дополнений через cfx run, оно не работает, но если я упаковываю расширение в файл .xpi, оно снова начинает работать.   -  person Ivan    schedule 26.10.2014


Ответы (1)


Из того, что я узнал, похоже, это ошибка в Addon SDK.

Отладка расширения с помощью cfx run по какой-то причине отключает XHR, поэтому, если я запущу установку упакованного расширения .xpi, XHR (и все остальное) снова заработает.

person Ivan    schedule 26.10.2014
comment
Чтобы найти обходной путь, см. этот ответ - person therealjeffg; 27.10.2014