2013-07-02 3 views
2

У нас есть мобильный проект PhoneGap, который использует Dojo. На данной HTML-странице, например. index.html, мы имели бы тег JavaScript, похожее на это:Как загрузочный Dojo из мобильного локального хранилища

<script> 
    require(["path/to/myApp", "dojo/domReady!"], function(MyApp) { 
     new MyApp().startup(); 
    }); 
</script> 

путь/к/myApp.js затем будет класс, который выполняет необходимые функции, например:

define(["dojo/_base/declare", 
    "dojox/mobile/deviceTheme", 
    "dojox/mobile/compat"], 
    function(declare) { 
     return declare(null, { 
      startup: function() { 
       // create and display views etc. 
      } 
     }); 
    }); 

Что мы пытаюсь сделать, это реализовать средство автоматического обновления по следующим направлениям:

  • при запуске использовать AJAX для проверки с сервером, если версия приложения клиент является текущей.
  • Если клиент устарел, отправьте новый JavaScript (и/или HTML, CSS) клиенту по мере необходимости.
  • Клиент хранит JavaScript в локальном хранилище на устройстве.

Учитывая эту схему, при запуске клиент будет считывать JavaScript из локального хранилища и выполнять этот код, заменяя путь/на/myApp.js. То, с чем я борюсь, связано с тем, что Dojo «требует» функциональности AMD. Я думаю, мне все равно нужно будет использовать загрузчик Dojo для разрешения зависимостей и т. Д.

Из того, что я вижу, загрузчик Dojo использует «require» для поиска узла DOM, в который затем добавляется тег «script» , и, наконец, он устанавливает атрибут «src» тега сценария «path/to/myApp.js» (в этом примере). Мне нужен способ изменить это поведение, чтобы вместо этого запустить обновленный JavaScript, который теперь извлекается из локального хранилища на устройстве. Это позволит нам автоматически обновлять наше приложение с сервера, не требуя повторного развертывания в магазине приложений для небольших вещей, таких как исправления ошибок.

+0

См. Http://stackoverflow.com/questions/12709673/application-cache-in-html5-doesnt-work-in-android-phonegap-application/12710632#12710632 – Philippe

+0

Возможно, я неправильно понимаю, но я не думаю, что это это то, что мне нужно. Я пытаюсь загрузить Dojo (клиентская сторона, PhoneGap, а не Java на Android) из JavaScript, который хранится на устройстве через постоянное хранилище. – 4EverLive

+0

Я думаю, вам нужно предоставить более подробную информацию о настройке вашего приложения ... – Philippe

ответ

0

Существует загрузчик AMD, который делает то, что вы ищете:

Он также содержит timestamp functionality, где вы можете отправить JSON с текущими временными метками файла на сервере. Затем вам нужно будет написать серверный компонент, который возвращает массив файлов для обновления.

Раздел wiki содержит пример Dojo, поэтому его можно использовать с Dojo. Однако вы замените загрузчик Dojo другим загрузчиком, совместимым с AMD, что может вызвать проблемы. Я предполагаю, что это не будет проблемой.

Это не стандартный способ обновления приложений, почему бы не просто использовать обычный маршрут обновления приложений для телефона? Это будет означать, что для первого использования каждого компонента необходимо подключение к Интернету. Компоненты загружаются только тогда, когда они требуются в коде. У вас может быть скрытый компонент в приложении, которое не загружено, а затем внезапно пользователю требуется подключение к Интернету.

Однако, я полагаю, вы все это рассмотрели, и если ваше приложение всегда требует подключения к Интернету, это не будет проблемой.

Вы также представляете дополнительную проблему безопасности для своих пользователей приложений.Если ваш сервер взломан, код может быть отправлен всем вашим пользователям и выполнен на их телефонах. Стандартная функциональность App Store Update добавляет еще один уровень безопасности (хотя и небольшой) для ваших пользователей.

+0

Спасибо, я буду использовать это как ссылку. – 4EverLive

Смежные вопросы