AIR+Ajax 开发的一些细小的经验/心得/注意事项
(针对 AIR 1.5.2 )
最后更新:10年1月7日
=======================================
一直想写一些关于 AIR+ajax开发的教程, 但是后来细细一想
写这样的教程实在多余 adobe官方提供的文档已经足够了(中英文都有)
开发人员只要具备一定的js功力 同时对AIR有一个准确的认识(不需要深入 至少要知道AIR是什么 以及如何下载和安装AIRSDK)
那么有下面两个地址 就足以掌握AIR+Ajax的开发了
使用 HTML 和 Ajax 开发 Adobe AIR 1.5 应用程序
针对 HTML 开发人员的 Adobe AIR 语言参考
如果有时间和兴趣 也可以去
HTML 和 Ajax 的 Adobe AIR 开发人员中心 逛逛
(以上三个网址都是adobe官方提供)
所以 与其写教程 不如提炼出来一些小的经验/心得/注意事项来的有意义.
对于我来说 写起来容易 同时自己可以做个备忘
对于别人来说 如果遇到类似的问题 可以少走些弯路.
何乐而不为呢.
好 废话先说这些 下面进入正文(对有些人来说 正文同样是废话 呵呵) 注意: 以下针对AIR 1.5.2 for windows
写得很凌乱 如果大家看不懂 就先别看了 以后开发时 遇到问题可以过来瞧一瞧 看看我这篇备忘能不能帮上你什么忙.
=========================================
adobe官方提供的 AIRAliases.js 文件并没有包含所有air的api 的别名
例如这个 : window.runtime.flash.events.MouseEvent;
所以如果要用到它 可以自己手动指定一个 简写的别名
air.MouseEvent = window.runtime.flash.events.MouseEvent;
=========================================
标准的HTML text元素 到了AIR里 也不支持 undo/redo 了, 这个很烦
=========================================
某 dom元素 如 一个input框, 调用 dom.focus() 无法让dom获得焦点.
(此为bug, 2.0已修正)
解决方案 , 自己写一个 函数 用来实现这个功能
setFocus : function(el){
var CUSTOM_EVENTTYPE='_GTA_FOCUS';
var SET_FOCUS = function(event){
event.target.focus();
};
var focusEvent = document.createEvent('HTMLEvents');
focusEvent.initEvent(CUSTOM_EVENTTYPE, false, false);
el.addEventListener(CUSTOM_EVENTTYPE, SET_FOCUS , false);
el.dispatchEvent( focusEvent );
el.removeEventListener(CUSTOM_EVENTTYPE, SET_FOCUS, false);
}
我就不说这个函数的思路了 让代码说话吧.
=========================================
AIR中的 XmlHttpRequest 请求本地文件 找不到时 报 101错误 而不是404
这个不是绝对
我换个说法吧:
如果大家在使用XHR请求资源时, 报了101错误 也许不是什么复杂的问题, 只是那个资源不存在而已.
(这样说更好吧 呵呵)
=======================================
AIR对 alt + 字母/数字键的处理很特殊, 部分按键会映射成小键盘上的按键
keypress 事件中, 捕获不到alt键的状态
即使你按下了 alt+某一个按键, event.altKey也是false
(此为bug, 2.0已修正)
=======================================
keydown keyup时 event.charCode ==0
keypress 时 event.charCode == event.keyCode
=======================================
keydown keyup keypress 时, event.keyCode 总是一样的
(此为bug, 2.0已修正)
例如 AIR中
keydown keyup keypress 时 "-键"为189 ".键"为190 "A键"为65
而其他浏览器中 keydown keyup一样,keypress和另两者不一样
例如 其他浏览器中
keydown keyup 时 "-键"为189 ".键"为190 "A键"为65
keypress时 "-键"为45 ".键"为46 "A键"为97
=======================================
利用
window.addEventListener('keydown',HotKeyListener,true);
大家可以自己比较容易的实现应用级的全局快捷键.
注意;
1 要使用keydown, 而不是keypress (这个原因说来复杂... 试试就知道了 和我前面说的那些关于键盘事件的内容有关, 而且很多软件都是监听的keydown)
2 最后一个参数建议设置成true 否则快捷键可能会被window的子节点拦截 (如果有此需求 另当别论)
HotKeyListener 指代自己实现的快捷键监听函数.
这个要想实现的好 还有很多细节需要处理 例如 快捷键的注册 反注册 冲突处理等等. 在这里暂不细说.
=======================================
页面加载后 不允许 一些 eval 或 new Function 的执行
(详见
使用 HTML 和 Ajax 开发 Adobe AIR 1.5 应用程序 的第14章 AIR 安全性
这章非常非常重要, 熟悉js的人转过来搞air开发 最大的障碍可能就在这了
)
但是可以灵活的 运用 iframe + childSandboxBridge/parentSandboxBridge 来绕开这个限制(并不是所有情况都可以绕开)
关于相关的 思路 和方法 以后我有时间 而且有人希望了解的话,我再单独撰文吧
=======================================
"动态同步载入js文件" 在AIR中 没有完美解决方案.
目前网上流行的 以及各大著名ajax框架采用的方法 在AIR中都有问题.
例如
1 创建 <script src="....js" > 节点:
无法做到同步, 无论 defer怎么设置 , 都是异步.
2 使用ajax加载js内容 然后 eval .
由于air 对eval的一些限制 这个方案不可行. 采用我前面说的SandboxBridge方案也不行.
3 使用ajax加载js内容 然后塞入script节点内 作为内嵌script运行 也不行.也无法做到同步加载与执行.
(2.0中 此方法可行)
=======================================
AIR可以很轻松的获得 刚刚插入数据库(SQLite)的记录的主键, 这个特性要好好利用哦.
insertStmt.execute();
// get the primary key
var result = insertStmt.getResult();
var primaryKey = result.lastInsertRowID;
=======================================
AIR的数据库 有同步和异步两种连接,从而实现数据库的同步或异步操作.
但要注意 不要过度的使用异步数据库操作.
当然也不要闲置不用 浪费了如此优秀的特性.
=======================================
window.runtime.air.update.ApplicationUpdater 类的 initialize 方法是异步的.
想要在初始化之后 执行某动作 要使用事件监听的方式 监听 INITIALIZED 事件.
=======================================
10年1月7日 新增:
清空 canvas 时,
使用 canvas.width=canvas.width 性能高于
context.clearRect(0, 0, canvas.width, canvas.height);
=======================================
先到这吧 如果有新的经验心得再补充
分享到:
相关推荐
从中国环境监测总站每小时发布的空气质量监测数据网上自动获取,包括600多个监测点,120个城市。
使用HTML和AJAX开发AIR应用程序的中文帮助文档,很不错!
《flash+flex+air移动开发入门经典——适用于android、ios和blackberry》 第1章 flash、flex和air简介 1 1.1 adobe flash 1 1.2 actionscript 3.0 2 1.2.1 ecmascript 2 1.2.2 关键概念 3 1.3 flex框架 11 ...
Python获取中国环境总站 CNEMC 采集的实时空气质量数据 从中国环境总站采集空气质量六...发布结果通常为每小时更新1次,由于数据传输需要一定的时间,发布的数据约有半小时延滞,例如15时的监测数据在15:30左右发布。
第 7 章: 开发针对移动设备的 AIR 应用程序 设置开发环境 移动应用程序设计注意事项 创建移动设备 AIR 应用程序的工作流程 设置移动应用程序属性 打包移动 AIR 应用程序 调试移动 AIR 应用程序 在移动设备上...
NULL 博文链接:https://lxs647.iteye.com/blog/1179043
(1)串口接收温度,湿度,烟雾浓度进行数据处理后上传至云端 (2)当温度过高时会进行电话提示(当温度高于设置值,会拨打一次电话 ,如果此时温度持续高于设置值则不会再次拨打电话,如果低于设置值后 再次高于...
Flash创建AIR
flash+flex+air移动开发入门经典(4)源码 最后一个了
《AIR+Android应用开发实战》(邱彦林)随书代码
本書全面講解Adobe AIR(Adobe Integrated Runtime)技術和開發實踐。AIR允許利用現有的Web開發技能(包括Flash、Flex、HTML、JavaScript、Ajax)優勢,建立和配置跨平台(或跨作業系統)的桌面RIA(Rich Internet ...
Flash+Flex+Air 移动开发入门经典——适用于Android、iOS、BlackBerry系统
AIR 32或更高 ANE +依赖关系 从终端cd进入/ example-mobile并运行: bash get_android_dependencies.sh ------------------ Windows版本使用Chromium Embedded Framework的CefSharp WinForms版本。 先决...
一款中文版的pdf资料,详细的介绍了开发的各个细节。点击可直接跳转到相应篇章,比较实用
摘要:VB/C#.Net实体代码生成工具(EntitysCodeGenerate)是一款专门为.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的程序代码基于面向对象、分层架构、ORM及反射+工厂设计模式等。支持.Net1.1及以上...
hostsPlus是一款hosts增强编辑小工具,利用这款工具可以实现本地开发环境的高效切换。 目前已实现Windows, Mac三大平台的支持,采用Adobe Air开发,采用MIT协议发布,代码托管在github上面。 主要...
交付中心包括厂商、服务商、客户三者的角色及产链流程及功能设计,适合做大型to b产生设计的产品或售前人员使用
资源名称:Android移动应用开发 基于Adobe AIR内容简介:《Android移动应用开发:基于AdobeAIR》共四部分19章,主要介绍如何使用AdobeAIR开发Android移动应用,深入讲解Android移动开发特有的各种主题,力图帮助读者...
使用HTML和Ajax开发Adobe.AIR.1.5
Flash+Flex+AIR移动开发入门经典.pdf