|
Posted on 2007-11-05 20:39 Kerwin Weng 閱讀(3816) 評論(7) 編輯 收藏 所屬分類: Javascript
好像國內(nèi)對Adobe的新產(chǎn)品AIR反應(yīng)還不多,我個人試用了下覺得其實用處還是很大的,于是我就拋磚引玉寫一篇相關(guān)介紹文章吧
AIR其實是一套框架和一個VM,它允許用戶把Javascript,HTML,CSS集成到統(tǒng)一的客戶端,在用戶桌面運行,避免了瀏覽器差異,并且實現(xiàn)了跨平臺的通用性,同時又對Javascript功能進(jìn)行了很多擴展,比如讀取本地磁盤文件,做跨域的遠(yuǎn)程訪問,使用多媒體文件等等(相信是flash的底層在支持),相對于兩年前的Flex,AIR在RIA領(lǐng)域無疑又是一個跨越,想象一下以后我們可以用JS+HTML+CSS來寫基于http的遠(yuǎn)程且防火墻安全的C/S應(yīng)用了,還是蠻爽吧
Demo在這里:http://labs.adobe.com/showcase/air/?promoid=BJXTF
用JS來寫應(yīng)用的文檔在這里:http://livedocs.adobe.com/labs/air/1/devappshtml/
Adobe AIR出新版SDK后,出乎意料的是很多之前的Demo不能跑了,會出"parsing disallowed",原因就是adobe換用了新的安全框架,禁止掉了Javascript中某些可能對其框架做出安全威脅的API,比如說JSON的命根--eval
Adobe的官方解釋是在AIR2禁止掉了類似eval這種動態(tài)代碼加載技術(shù)在其Application sandbox中的運行,解決辦法是把你有eval的應(yīng)用移到Browse sandbox中執(zhí)行,所謂的Browse sandbox意思是你的應(yīng)用主頁面是通過application.xml中配置的根頁面來用iframe引入的,在iframe引入的頁面中你就可以做eval,而把其他如跨域查詢等AIR提供的高級API操作放到根頁面中去做,然后通過一個parent/childSandboxBridge來做互相引用和傳遞數(shù)據(jù)的橋梁,但是同時你在iframe中的js也不能直接使用AIR所提供的一些高級API,比如air.trace().原文的解釋在這里
,Adobe甚至還寫了一篇文章來鼓吹這種方式其實更符合設(shè)計模式--根頁面負(fù)責(zé)數(shù)據(jù)傳遞,iframe頁面負(fù)責(zé)業(yè)務(wù)邏輯.但是無論如何這篇文章作為Browse sandbox的入門來講還是很值得細(xì)讀的
于是結(jié)合自己當(dāng)前的實際需要,我寫了一個批量查詢airasia.com機票的小工具,因為airasia從來都是打廣告說從多久到多久,從那里飛到那里才幾塊MYR起! 就是這個"起"字相當(dāng)關(guān)鍵......直接造成每次我去查的時候發(fā)現(xiàn)因為"已經(jīng)快滿坐"了,所以價格和平時的一樣,甚至更高,聽同事說他們都是先一天一天去查看哪天便宜就趕快預(yù)定,太辛苦了吧,那我要查2007-11-05到2008-01-31日的機票要花多少時間啊,而且不查到最后一天還不知道是不是最便宜的,嘲笑他們原始之后我就決定自己寫個工具來查
所以我寫的第一個AIR應(yīng)用就是這個AirAsiaTicketsSearch,可以批量查詢某個時間段去和某個時間段回的所有機票,并且把機票價格用jQuery.tablesort給排序出來,并且用jQuery.tablesort.page做了分頁(說句題外話,jQuery的tablesort確實很強大,但是在排序"1,280.00 CNY"這種數(shù)據(jù)的時候還是有問題).另外開發(fā)環(huán)境值得一說,無論是eclipse+aptana或者aptana standalone都一樣的,aptana就是一個Eclipse的RCP,關(guān)鍵就是aptana真的是很好用的工具,目前不僅支持AIR,而且還支持開發(fā)Apple iPhone的應(yīng)用,只是專業(yè)版要收費.....
后面給出截圖,結(jié)果發(fā)現(xiàn)昨天還有295.99的機票,到了今天就漲到349.99了-_-!

評論
要說AIR, 微軟很早以前推出的有 HTA. 至于腳本擴展, 為啥病毒木馬橫行, 也跟微軟那個強大的 VBScript/JScript 擴展是分不開的. 國內(nèi)要流行, 那也得先把做桌面程序的人都干掉才行.
印象中hta/htc當(dāng)時還沒有AJAX這類應(yīng)用,作用有限,現(xiàn)在AIR的API允許Javascript使用多媒體資源,跨域資源,windows menu,os資源等,甚至可以開socket,相對于當(dāng)年,應(yīng)該說air強大的正是時候.
關(guān)于國內(nèi)流行這個問題,我覺得只要一個產(chǎn)品真的好,真正能幫助程序員提高開發(fā)效率,降低維護(hù)難度,又能讓客戶體驗提高的話,不用誰去打敗誰,都會有很多C/S程序員和新入門的程序員轉(zhuǎn)去另一邊
典型的技術(shù)推廣貼的說辭
用戶 A 寫道:
我從實用的角度上來說 **** 框架/技術(shù)是相當(dāng)爛的一個東西.
從理論上也許先進(jìn).
用戶 B 反駁道:
我不喜歡聽沒有證據(jù)的東西。不知道你指的"**** 是相當(dāng)爛的一個東西"什么意思?不知道你使用****有多久?是做了具體的項目體會出來它很爛還是玩了半天就覺得它爛?能不能舉出具體的例子?
我認(rèn)為 **** 很棒,因為這是我在做項目和學(xué)習(xí)的過程中體會到的。
國外有很多牛人都認(rèn)為 ****很棒,牛人 XXX 從????年就已經(jīng)在他的項目中使用了自己的****架構(gòu),至今有很多大型的項目都在使用這個****架構(gòu)。**** 在此之上做了很多的改進(jìn),總結(jié)了框架 A 和框架 B 的不足,是經(jīng)過很多考驗和實踐總結(jié)的成果,希望大家不要只花了半天時間就把它否定掉。
把 **** 替換成不同的框架/技術(shù), 這就是當(dāng)前技術(shù)推廣貼的一貫文風(fēng).
放這里完全合適, 呵呵, 其實這個是 JavaEye 上某 Spring Fans 反駁另一位反駁者的話的. 開個玩笑了, 別介意, 呵呵.
當(dāng)然非常感謝樓主寫了介紹文章, 呵呵. AIR 我也去看了一眼, 個人覺得還不行啊, 就跟 AJAX 一樣, 開發(fā)成本太高了. 哪天瀏覽器內(nèi)置各種控件(如 Tree, Table, Grid)可以調(diào)用就好了.
我沒有推廣的意思,只是分享自己最新的體驗和看法,大家用不用不是我關(guān)心的.
蘿卜白菜各有所愛吧,我猜你肯定是做Web application的吧,所以巴不得瀏覽器內(nèi)置很多東西,而且最好不用寫JS,都交給gwt,JSF等幫你生成了.個人覺得還是應(yīng)該把Javascript當(dāng)成一門很有用的語言對待,不過我最希望瀏覽器做的就是提供統(tǒng)一的支持,少一些自作主張,尤其憎惡IE這個不遵守W3C標(biāo)準(zhǔn)的家伙,這在要求客戶統(tǒng)一使用IE的時候是不需要考慮的
我不知道你說的AJAX開發(fā)成本高指什么,我覺得倒是很容易啊,prototype,jQuery,dojo我還可以數(shù)出10個js的lib都實現(xiàn)了高級AJAX的抽象封裝,甚至我自己改過的JSON-RPC,調(diào)用遠(yuǎn)程數(shù)據(jù)也就是1-2句代碼.如果是指整個AJAX應(yīng)用的話,的確Javascript占的分量相當(dāng)多,對沒有豐富的Javascript組織經(jīng)驗的團(tuán)隊來說還是很繁重的工作量,但是一旦有很好代碼組織體系,充分利用Javascript的繼承特性,開發(fā)應(yīng)用還是非??斓?更不要說還有像jQuery這樣的優(yōu)秀lib,插件眾多,甚至在Javascript中實現(xiàn)AOP
@pallove 的確,可能業(yè)界還沒有找到AIR最有競爭力的場景吧,80%功能瀏覽器可以做,剩下20%Flash和C/S又輕而易舉,不過即便這樣,AIR在有限的RIA場景中可能也是受人喜愛的
嗯,是的,其特殊性就算jser不喜歡,flasher也會喜歡的。對air現(xiàn)在只是觀忘。java總是有很多東西學(xué)不完,而flash總是在等待學(xué)一些東西。
|