好的,我意识到这个线程是旧的,但如果它对某人有帮助。
我的解决方案感觉就像一个完整的 hack - Adobe 的耻辱 - 但它有效。
将数据作为 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。