Не може да се изпрати междудомейн 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