Sencha + PhoneGap

Я собираюсь разработать приложение для iPhone с помощью Sencha Touch + PhoneGap, и у меня есть несколько очень простых вопросов:

1) Я хочу прочитать XML файл, расположенный по адресу http://abc.om/app/a3/. Я использовал Sencha для чтения этого xml, но он дал мне следующую ошибку:

XMLHttpRequest не может загрузить URL. Происхождение не допускается Access-Control-Allow-Origin.

Это правильный метод/подход для использования Sencha для чтения XML? Если да, то как решить эту проблему? Кто-то сказал, что Sencha - клиентская сторона, и он не может прочитать Xml из домена - это правда? Что происходит в мобильном приложении? Должен ли я использовать Phonegap здесь?

2) Когда я разрабатываю приложение для iPhone, как мне проверить приложение? - используя Chrome? Или с помощью phonegap каждый раз, а затем проверить его на iPhone?

Ответы

Ответ 1

В общем случае приложения PhoneGap не подвергаются ограничениям междоменной безопасности после их развертывания на мобильном устройстве. Причины этого различны в зависимости от платформы, для которой вы разрабатываете, но для iPhone это связано с тем, что ваши локальные ресурсы PhoneGap загружаются в браузер на iPhone с помощью URI file:///; это позволяет обойти ограничение безопасности между доменами. Если вы создаете обычный веб-сайт, размещаемый на сервере, тогда вы ограничены этой политикой безопасности. Это одно из преимуществ создания приложений PhoneGap.

  • Я не знаком с Sencha на 100%, но вы можете использовать любую фреймворк поверх основного объекта XMLHttpRequest для междоменной связи в PhoneGap. Будь то Sencha, jQuery, xui, MooTools и т.д.

  • Для тестирования приложений PhoneGap я обычно использую комбинацию своих настольных браузеров и некоторую дополнительную оснастку, чтобы помочь мне. В вашем случае, если вы загружаете приложение PhoneGap локально на свой компьютер в браузере, таком как Safari (что позволяет сделать XHRs с URI file:///), вы не увидите проблем между доменами. Safari - один из немногих браузеров, который позволяет вам это делать. Кроме того, вы можете использовать прокси-сервер на своем локальном компьютере и локальный веб-сервер сделать сетевые запросы и прокси-сервер обратно в ваше приложение. Я обычно использую удивительный инструмент под названием sleight, который является node.js веб-сервером который будет запрашивать обратные запросы к целевому внешнему домену, если сервер не может найти запрашиваемый актив локально на вашем компьютере. Я попытаюсь выложить пример использования ловкости для вас:

    • Предположим, что ваши приложения приложения PhoneGap расположены под ~/src/www, причем приложение находится в index.html
    • Также предполагается, что вы хотите получить доступ к домену abc.com из приложения PhoneGap.

Вы бы использовали ловкость, как это:

$ cd ~/src/www
$ sleight target=abc.com

Теперь у вас работает локальный веб-сервер, обслуживающий весь контент в вашем каталоге www. На странице index.html теперь вы можете отправить XHR на http://abc.om/app/a3/, и проказчивость проксирует их обратно вам. Поэтому вы можете указать свой браузер на http://localhost:8088/index.html, и вы получите свое приложение PhoneGap index.html.

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

Ответ 2

Относительно вопроса № 2: Вы можете использовать "chrome -disable-web-security", чтобы обойти ограничение на одну доменную зону и запустить приложение phonegap.

Изменить: как и в Chrome версии 48, вы также должны добавить флаг "--user-data-dir". См. этот вопрос.