如何从移动本地存储引导 Dojo

Posted

技术标签:

【中文标题】如何从移动本地存储引导 Dojo【英文标题】:How to bootstrap Dojo from mobile local storage 【发布时间】:2013-07-02 09:48:40 【问题描述】:

我们有一个使用 Dojo 的 PhoneGap 移动项目。在给定的 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”标签,最后将 script 标签的“src”属性设置为“path/to” /myApp.js”(在本例中)。我需要一种方法来更改此行为,以运行更新后的 JavaScript,该 JavaScript 现在是从设备上的本地存储中获取的。这将使我们能够从服务器自动更新我们的应用程序,而无需重复重新部署到应用程序商店以进行错误修复等小事。

【问题讨论】:

见***.com/questions/12709673/… 也许我误解了,但我认为这不是我需要的。我正在尝试从通过持久存储存储在设备上的 JavaScript 引导 Dojo(客户端,PhoneGap,而不是 android 上的 Java)。 我认为您需要提供有关您的应用设置的更多详细信息... 我很抱歉,我应该更清楚。我已经编辑了我的原始帖子。 你能告诉我你通过持久存储在设备上存储 javascript 的部分吗? 【参考方案1】:

有一个 AMD 加载程序可以满足您的需求:

LSJS:https://github.com/zazl/lsjs LSJS 的维基:https://github.com/zazl/lsjs/wiki

它还包含一个timestamp functionality,您可以在其中将带有当前文件时间戳的 JSON 对象发送到服务器。然后,您需要编写一个服务器组件,该组件返回要更新的文件数组。

wiki 的"Getting started" 部分包含一个Dojo 示例,因此应该可以与Dojo 一起使用。但是,您将用另一个兼容 AMD 的加载器替换 Dojo 加载器,这可能会导致问题。我的猜测是这不会有问题。

这不是更新应用程序的标准方式,为什么不直接使用普通的手机应用程序更新途径呢?这意味着首次使用每个组件都需要 Internet 连接。组件仅在代码需要时才加载。您可能有一个隐藏在应用程序深处的组件未加载,然后用户突然需要互联网连接。

但是,我假设您已经考虑了所有这些问题,并且如果您的应用无论如何都需要始终在线的 Internet 连接,那么这不是问题。

您还为您的应用用户引入了额外的安全问题。如果您的服务器被黑客入侵,那么代码可以发送给您的所有用户并在他们的手机上执行。标准的 App Store 更新功能为您的用户增加了另一层安全性(尽管很小)。

【讨论】:

谢谢,我会以此作为参考。

以上是关于如何从移动本地存储引导 Dojo的主要内容,如果未能解决你的问题,请参考以下文章

如何将本地存储从 JS 发送到 PHP 文件(?)

将所有从“Firebase 推送通知”接收的消息存储在移动数据库/本地

使用实体框架6将数据从数据库存储到本地

使用本地存储在引导程序 4 中保持页面刷新的活动选项卡?

Backbone.js 本地存储,从服务器预先加载

HTML5移动开发实战必备知识——本地存储