Javascript AdobeAIR for JS是否支持某种非持久性数据容器?

Javascript AdobeAIR for JS是否支持某种非持久性数据容器?,javascript,air,session-state,Javascript,Air,Session State,对于需要在AdobeAIR中开发应用程序的项目,我选择HTML/Ajax版本。 目前,该项目相当小,包含一个登录部分和一个详细信息部分 我想做的是在应用程序启动时显示login.html,如果成功,则显示/浏览到details.html 我的问题是,是否有一些快速而肮脏的方法将我从登录名(如userid)收到的一些信息保存在会话/应用程序容器中 我简要地研究了他们的BlackBookSafe示例,但我在那里看到的是,尽管有多个页面,他们实际上一直保持BlackBookSafe.html打开,并将

对于需要在AdobeAIR中开发应用程序的项目,我选择HTML/Ajax版本。 目前,该项目相当小,包含一个登录部分和一个详细信息部分

我想做的是在应用程序启动时显示login.html,如果成功,则显示/浏览到details.html

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

我简要地研究了他们的
BlackBookSafe
示例,但我在那里看到的是,尽管有多个页面,他们实际上一直保持
BlackBookSafe.html
打开,并将子页面加载到正文中,从而将会话数据保存在
BlackBookSafe.html


但在我看来,它造成了一种混乱,宁愿让每个页面都自行处理(javascript方面),这会使它更易于阅读。

我看到了一些黑客攻击,比如将数据保存在文件上(在Adobe的一个示例中使用),或者将其放入数据库,但我没有找到任何快速的非持久性数据存储。 我希望看到一个键/值字典连接到NativeApplication对象,在那里我可以添加我的非持久性数据,但它不存在


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

因为您使用的是AIR,所以我假设这不是一个web应用程序

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

或者,您可以使用singleton Users类。在申请期间保持开放状态



编辑:

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

var storage = {};
用法:

storage.pswd = 'password';
storage.user = 'username';
// Retrieval:
alert(storage.pswd);

好吧,我知道这条线很旧,但如果它能帮助别人的话

我的解决方案感觉像是一个完全的黑客——对Adobe来说很丢脸——但它是有效的

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

我把它储存在第一个菜单里。在
项目列表中。
使用
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电脑上写的,因此您必须调整使用windows/linux的NativeWindow.menu的代码。

您在传统的基于浏览器的web应用程序上使用AIR的动机是什么?客户需要安装在客户计算机上的应用程序,该应用程序可以更新用户在网站上的任何活动。要达到这个效果,最简单的方法是跨平台的空气。把它想象成一个简单的单向信使,它并没有出现,而是补充了网站。这不是几乎每个AIR应用程序都会做的吗?我使用AIR实现Ajax。现在有了在javascript中创建静态类的方法。我希望能有一个单独的容器来存放我的数据。对于会话,我的意思不是“web会话”,而是“程序会话”(从程序启动到关闭)。Sql旨在为多个。。。。。。使用,而我的使用仅用于当前会话,当程序关闭时,数据应丢失。因此,使用SQL或文件系统似乎有点过分了。我认为javascript对象将是完美的。只需添加名称-值对“o.name=‘username’;o.pwd=‘password’;”等。AIR提供对剪贴板的访问。你也许可以用它做点什么;但你需要与其他应用程序共享它。或者,因为您可以访问DOM,所以可以使用cookie。但是,如果安全性是一个问题,那么这些文件是可以访问的,而且很难确保它们在完成后被清空。在什么范围内?我猜他所有的都是html页面,在本地运行浏览器。在我“浏览”一页又一页的环境中,这确实不起作用。我需要将存储对象附加到不变的对象,例如NativeApplication对象。但是我做不到。所以“我的”解决方案是拥有一个带有IFRAME的“父”html页面,这是目前为止唯一有效的解决方案。。。