0

对于需要在 Adob​​e AIR 中开发应用程序的项目,我选择 HTML/Ajax 版本。目前该项目很小,包含登录部分和详细信息部分。

我想做的是在应用程序启动时显示 login.html,如果那是成功的 show/browse-to details.html 。

我的问题是,是否有一些快速而肮脏的方法可以将我从登录中收到的一些信息(例如用户 ID)保存在会话/应用程序容器中?

我简要查看了他们的BlackBookSafe示例,但我看到的是,虽然有多个页面,但它们实际上一直保持blackbooksafe.html打开状态,并将子页面加载到正文中,从而将会话数据保存在blackbooksafe.html
但在我看来,它创建了一种一团糟,宁愿每个页面都照顾好自己(javascript wise),这将使它更容易阅读。

4

4 回答 4

1

好的,我意识到这个线程是旧的,但如果它对某人有帮助。

我的解决方案感觉就像一个完整的 hack - Adob​​e 的耻辱 - 但它有效。

将数据作为 JSON 字符串存储在菜单数据中

菜单在页面加载时保持不变,您可以将自定义数据分配给菜单。到目前为止,它似乎只喜欢简单的数据类型,如字符串或整数。所以解决方案是下载 json2.js ( http://json.org ) 并使用它stringify()parse()命令将您的应用程序状态转换为 JSON 字符串,然后将其存储在.data菜单的成员中。

我将它存储在第一个菜单中。在items列表中。
使用jQuery,我的应用程序代码如下所示:


function InitApp() {
    // check before we create the menu for the very first time.
    var menu = air.NativeApplication.nativeApplication.menu;
    var firstMenu = menu.items[0];
    var dataStore = firstMenu.data;
    if (dataStore == null) {
        air.trace("Create Menu Data Store");
        var dataObj = { 
            msg: "Message Object",
            status: 1 
        };
        var dataObjStr = JSON.stringify(dataObj);
        firstMenu.data = dataObjStr;
        dataStore = firstMenu.data;
        air.trace("Created menu data store");
        air.trace(dataObjStr);
    } else {
        var dataStore = firstMenu.data;
        var obj = JSON.parse(dataStore);
        air.trace("Retrieved Menu Data Store");
        air.trace(obj.msg);
    }

    BuildMenu();
    // check after we create our menu
    firstMenu = air.NativeApplication.nativeApplication.menu.items[0];
    firstMenu.data = dataStore; // pass it along.

}

$(document).ready(InitApp);

此数据在应用程序关闭时消失,因此仅在应用程序打开时才会持久。

真正的答案是 nativeApplication 支持与菜单完全相同的功能!

注意:我是在 Mac 上编写的,因此您必须调整代码以将 NativeWindow.menu 用于 windows / linux。

于 2010-09-13T22:56:41.507 回答
0

我看到了一些技巧,例如将数据保存在文件中(在 Adob​​e 的一个示例中使用),或者将其放入数据库中,但我没有找到任何快速的非持久性数据存储。我希望看到一个连接到 NativeApplication 对象的键/值字典,我可以在其中添加我的非持久性数据,但这并不存在。

最后我选择了一个 IFRAME 解决方案,父页面存储非持久性数据。

于 2009-03-31T16:57:54.357 回答
0

由于您使用的是 AIR,我认为这不是 Web 应用程序。

当然,Web 应用程序需要会话的原因是网页不打开持久连接。但是,在您的情况下,您可以使用正常的持久连接资源,其中包括保持打开状态的数据库连接,并使用您正在使用的任何 dbms 连接解决方​​案包含登录信息。出于您的目的,这应该完成在网络上使用的会话。

或者,您可以使用单例用户类。在应用程序期间保持打开状态。


编辑:

于 2009-03-31T17:04:24.247 回答
0

为什么不只创建一个常规对象:

var storage = {};

用法:

storage.pswd = 'password';
storage.user = 'username';
// Retrieval:
alert(storage.pswd);
于 2009-03-31T20:15:08.140 回答