Как загрузить Dojo из мобильного локального хранилища

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

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

path/to/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 из локального хранилища и выполнять этот код, заменяя path/to/myApp.js. С чем я борюсь, так это с привязкой этого к «требуемой» функциональности Dojo AMD. Я думаю, что мне все равно придется использовать загрузчик Dojo для разрешения зависимостей и т. д.

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


person 4EverLive    schedule 02.07.2013    source источник
comment
См. stackoverflow.com/questions/12709673/   -  person Philippe    schedule 02.07.2013
comment
Возможно, я неправильно понимаю, но я не думаю, что это то, что мне нужно. Я пытаюсь загрузить Dojo (клиентская сторона, PhoneGap, а не Java на Android) из JavaScript, который хранится на устройстве через постоянное хранилище.   -  person 4EverLive    schedule 02.07.2013
comment
Я думаю, вам нужно предоставить более подробную информацию о настройке вашего приложения...   -  person Philippe    schedule 02.07.2013
comment
Мои извинения, я должен был быть более ясным. Я отредактировал свой оригинальный пост.   -  person 4EverLive    schedule 02.07.2013
comment
Можете ли вы показать мне часть, где вы храните свой javascript на устройстве через постоянное хранилище?   -  person Philippe    schedule 02.07.2013
comment
По сути, это просто вызов AJAX, возвращающий JavaScript в виде строки (текст в приведенном ниже примере), которая затем сохраняется либо в постоянном хранилище на устройстве, либо (проще) в хранилище веб-браузера, например: localStorage.setItem(javaScriptClassName, text) ; ... но то, как хранится текст, не очень важно, это не то, с чем у меня проблема :-)   -  person 4EverLive    schedule 02.07.2013


Ответы (1)


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

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

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

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

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

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

person Stephen Simpson    schedule 03.07.2013
comment
Спасибо, я буду использовать это как ссылку. - person 4EverLive; 03.07.2013