`

AIR+Ajax 开发的一些细小的经验/心得/注意事项(最后更新:10年1月7日)

阅读更多
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);

=======================================

先到这吧 如果有新的经验心得再补充
4
0
分享到:
评论
1 楼 唯快不破 2009-10-05  
fins,有关于gtgrid的消息吗?

相关推荐

Global site tag (gtag.js) - Google Analytics