Пакетные приложения Firefox OS и XMLHttpRequests

Я искал упакованные приложения для ОС Firefox и полагаюсь на Симулятор, так как у меня нет сборки ОС на устройстве. У меня возникают проблемы с запросами XHR, и я не уверен, связана ли проблема с настройкой, которую я не замечаю, или симулятор просто глючит.

Мое прочтение документации предполагает, что добавление разрешений для network-http должно быть достаточным для выполнения запросов XHR к веб-службе. Я также видел в исходном коде разрешение systemXHR. Я пробовал оба, но пока без удовольствия. Я использую симулятор с Firefox для OS X, и мой манифест выглядит так:

Манифест:

{
  "version": "0.1",
  "name": "Hello World",
  "description": "A hello world app.",
  "launch_path": "/app/index.html",
  "icons": {
    "16": "/app/img/icons/mortar-16.png",
    "48": "/app/img/icons/mortar-48.png",
    "128": "/app/img/icons/mortar-128.png"
  },
  "installs_allowed_from": ["*"],
  "permissions": {
    "systemXHR": {},
    "network-http": {},
    "network-tcp": {}
  },
  "type": "privileged"
}

На похожий вопрос был дан ответ, но я думаю ответ мог быть предназначен для веб-приложения, а не для упакованного приложения, и пример был бы полезен в любом случае.

Я упускаю что-то очевидное, сломан ли симулятор или для упакованных приложений требуется CORS?


person aerych    schedule 14.12.2012    source источник
comment
Отредактировано, чтобы указать, что я использую OSX.   -  person aerych    schedule 17.12.2012
comment
У меня была возможность попробовать это на версии симулятора для Windows, и XHR работает, как и ожидалось. Кажется, что предварительный просмотр симулятора OSX просто глючит.   -  person aerych    schedule 17.12.2012
comment
Когда вы устанавливали свое приложение, вы заархивировали его и использовали другой манифест, как это требуется для работы привилегированного типа?   -  person David Zorychta    schedule 13.01.2013


Ответы (4)


Обратите внимание, что для использования разрешения systemXHR вам также необходимо передать специальный аргумент при создании объекта запроса, например.

var xhr = new XMLHttpRequest({mozSystem: true});
person benfrancis    schedule 14.12.2012
comment
Да да. У меня есть, но все равно нет радости. - person aerych; 15.12.2012

Для Backbone или другой среды Javascript с использованием JQuery $.ajax под капотом используйте:

$.ajaxSetup( {
    xhr: function() {return new window.XMLHttpRequest({mozSystem: true});}
});

Я не думаю, что вам нужно использовать CORS. Мое приложение отлично работает в симуляторе без CORS, но не может вызвать удаленный сервер REST, если он запущен на локальном сервере.

Имейте в виду, что если вы забыли установить

тип данных: "текст"

для некоторых вызовов $.ajax (например, для загрузки html-шаблона) вы можете получить XMLDocument в результате, в то время как настольные браузеры возвращают строку.

person arekf    schedule 25.09.2013


Чтобы включить CORS в моем приложении Firefox OS, мне пришлось включить разрешение systemXHR в файле manifest.webapp приложения:

"permissions": {
    "systemXHR" : {
      "description" : "Required to access remote api"
    }
}
person dagur    schedule 20.08.2014