本文整理了一些最重要(或者說人氣比較高罷)的新標準,雖然它們多數還只是w3c的草案,離recommendation級別還早,卻已經成為新一輪瀏覽器大戰中備受追捧的明星,開發者社區里也涌現出大量相關的demo和api封裝,有些已經進入生產環境(比如google在iphone上實現的gmail離線應用),其實我覺得如今的web領域里,從廠商私有技術轉換成委員會標準再轉換成通用技術產生殺手級應用的周期已經顯著的加速了,是因為現在web application的需求太高了么…… update:剛才在solidot發軟文的時候我突然想明白怎么表述這個問題:其實現在很多瀏覽器廠商同時也是基于瀏覽器的應用開發者和web標準的制定者,就好像修筑舞臺的工程師同時也是舞臺上的演員和舞蹈動作的導演一樣,所以google, mozilla, apple們都在不遺余力的實現那些有利于開發web應用的技術標準,即時它們還是w3c working draft,相比之下ie team就比較缺乏動力,果然計劃經濟缺乏活力亞xd……
由于是源自筆記,對每個條目我只會列出稱呼和語法特征,暫時沒時間寫詳細的解釋和可執行的示例,但是會給出相關的文檔地址,除了列出已經支持該特性的瀏覽器,也會為不支持的瀏覽器提供替代/過渡的實現。
===================廢話結束的分割線=======================
對整個外鏈css文件和部分css代碼使用的媒體類型偵測,人氣高的原因顯然是因為移動設備……
w3c標準:http://www.w3.org/tr/css3-mediaqueries/
mdc文檔:https://developer.mozilla.org/en/css/media_queries
opera文檔:http://www.opera.com/docs/specs/css/
支持:firefox 3.5+, safari 3+, opera 7+
css變形,有人用這個實現偽3d效果以及旋轉效果的jquery插件
w3c標準:http://www.w3.org/tr/css3-2d-transforms/
mdc文檔:https://developer.mozilla.org/en/css/css_transform_functions
webkit博客的介紹: http://webkit.org/blog/130/css-transforms/
支持:firefox 3.5+, safari 3.1+
替代/過渡:ie5.5+ matrix filter http://msdn.microsoft.com/en-us/library/ms533014(vs.85).aspx
備受期待的css動畫,webkit團隊提出的草案,transition實現簡單的屬性漸變,animation定義更復雜的動畫效果
w3c標準:http://www.w3.org/tr/css3-transitions/
w3c標準:http://www.w3.org/tr/css3-animations/
webkit博客的介紹:http://webkit.org/blog/138/css-animation/
約翰同學的介紹:http://ejohn.org/blog/css-animations-and-javascript/
支持:safari 3.1+
能在網頁里嵌入任意字體是設計師的夢想……不過這里支持的也僅限truetype和opentype
w3c標準:http://www.w3.org/tr/css3-fonts/#font-resources
msdn文檔:http://msdn.microsoft.com/en-us/library/ms530303(vs.85).aspx
mdc文檔:https://developer.mozilla.org/en/css/@font-face
支持:firefox 3.5+, safari 3.1+, opera 10.0+, ie4.0+
ppk同學維護的文檔: http://www.quirksmode.org/css/contents.html
css3.info維護的文檔:http://www.css3.info/modules/selector-compat/
一個測試頁面:http://westciv.com/iphonetests/
簡潔的持久存儲,鍵值對的形式
w3c標準:http://www.w3.org/tr/webstorage/
ppk同學維護的兼容性列表:http://www.quirksmode.org/dom/html5.html#localstorage
mdc文檔:https://developer.mozilla.org/en/dom/storage
msdn文檔:http://msdn.microsoft.com/en-us/library/cc197062(vs.85).aspx
支持:firefox 3.5+, safari 4.0+, ie 8.0+
用一個manifest文件緩存靜態資源(圖片,css, js之類)在離線狀態下使用,不是結構化數據
w3c標準:http://www.w3.org/tr/offline-webapps/#offline
mdc文檔:https://developer.mozilla.org/en/offline_resources_in_firefox
支持:firefox 3.5+
本地數據庫,支持sql,最早是google gears實現,現在的w3c草案的編輯也是google的工程師……但奇怪的是,gears的api跟現在的草案不兼容,chrome甚至為了保留捆綁的gears的數據庫api而刪除了webkit實現的html5 api……而google在iphone上實現gmail離線功能的時候又采用webkit的api……真糾結……
w3c標準:http://www.w3.org/tr/offline-webapps/#sql
webkit博客的介紹:http://webkit.org/blog/126/webkit-does-html5-client-side-database-storage/
iphone的文檔:http://developer.apple.com/documentation/iphone/conceptual/safarijsdatabaseguide/usingthejavascriptdatabase/usingthejavascriptdatabase.html#//apple_ref/doc/uid/tp40007256-ch3-sw1
支持:safari 3.1+
替代/過渡:gears http://code.google.com/p/gears/wiki/database2api
多線程,在后臺執行復雜運算,不能操作dom,線程之間通過消息事件通信
w3c標準:http://www.w3.org/tr/workers/
mdc文檔:https://developer.mozilla.org/en/using_web_workers
支持:firefox 3.5+
替代/過渡:gears http://code.google.com/p/gears/wiki/html5workerproposal
地理api
w3c標準:http://www.w3.org/tr/geolocation-api/
mdc文檔:https://developer.mozilla.org/en/using_geolocation
支持:firefox 3.5+
替代/過渡:gears http://code.google.com/p/gears/wiki/geolocationapi
原生拖拽事件
w3c標準:http://www.w3.org/tr/html5/editing.html#dnd
mdc文檔:https://developer.mozilla.org/en/dragdrop/drag_and_drop
apple文檔:http://developer.apple.com/documentation/appleapplications/conceptual/safarijsprogtopics/tasks/draganddrop.html#//apple_ref/doc/uid/30001233
支持:firefox 3.5+, safari 2.0+, chrome 1.0+, ie 5.0+
用html標簽來嵌入視頻音頻的好處并非是“開源格式”,而是“開放性”,讓多媒體可以與其他頁面元素交互,或者用頁面技術去跟視頻“mashup”,這種隨意組合和交互的能力是web技術興盛的基石,也是像flash這類封閉ria容器最大的缺點。
mdc文檔:https://developer.mozilla.org/en/using_audio_and_video_in_firefox
webkit博客的介紹:http://webkit.org/blog/140/html5-media-support/
支持:firefox 3.5+, safari 3.0+, chrome 3.0+
替代/過渡:用video標簽嵌套embed http://hacks.mozilla.org/2009/06/html5-video-fallbacks-markup/
apple發明,最早應用于dashboard,目前主流的js圖像技術,mozilla已經在實現opengl es標準的canvas 3d了,另外據說ie team為支持canvas做了大量工作……實際上canvas api相當底層,特別是交互方面,不如svg直觀,所以出現了很多封裝它的庫
mdc文檔:https://developer.mozilla.org/en/canvas_tutorial
支持:firefox 1.5+, safari 2.0+, chrome 1.0+, opera 9.0+
替代/過渡:excanvas.js http://code.google.com/p/explorercanvas/
w3c標準:http://www.w3.org/tr/svg12/
ibm dw教程:http://www.ibm.com/developerworks/cn/views/xml/tutorials.jsp?cv_doc_id=84896
支持:firefox 1.5+, safari 3.0+, chrome 1.0+, opera 9.0+
替代/過渡:raphael.js http://raphaeljs.com/
主要是增加跨域能力以及請求過程中的事件
w3c標準:http://www.w3.org/tr/xmlhttprequest2/
mdc文檔:https://developer.mozilla.org/en/using_xmlhttprequest#monitoring_progress
xdomainrequest (xdr)
msdn文檔:http://msdn.microsoft.com/en-us/library/cc288060(vs.85).aspx
支持:firefox 3.5+(實現了部分), ie 8.0+(實現了部分)
千呼萬喚的跨域訪問控制,目前firefox3.5和ie8有一些不同,ie8搞的xdr和xdm我也不知道是不是準備提交給w3c標準化的東西……
w3c標準:http://www.w3.org/tr/cors/
mdc文檔:https://developer.mozilla.org/en/http_access_control
cross-document messaging (xdm)
msdn文檔:http://msdn.microsoft.com/en-us/library/cc197057(vs.85).aspx
支持:firefox 3.5+, ie8.0+
firefox和actionscript3早就實現了的東西……不過其實現在json這么流行,有沒有e4x好像都無所謂了~(瞎說的,其實在js代碼里直接寫dom對象而不是html字符串,會方便很多)
mdc文檔:https://developer.mozilla.org/en/e4x
支持:firefox 1.5+
原生的json支持,速度和安全性都比eval強一百倍亞一百倍,另外要注意douglas crockford的json2.js是一個用js實現的js解釋器,所以安全性更好
mdc文檔:http://blog.mozilla.com/webdev/2009/02/12/native-json-in-firefox-31/
msdn文檔:http://blogs.msdn.com/ie/archive/2008/09/10/native-json-in-ie8.aspx
支持:firefox 3.5+, ie8+
替代/過渡:json2.js http://www.json.org/json2.js
js1.6里實現的數組方法,主要是foreach, map, fliter這幾個函數式編程里非常重要的方法,還有反向查詢
mdc文檔:https://developer.mozilla.org/en/new_in_javascript_1.6#array_extras
支持:firefox2.0+, safari 3.0+, google chrome 1.0+, opera 9.5+
替代/過渡:都可以通過擴展array.prototype來模擬
區分數組和對象
支持:無
替代/過渡:array.isarray = function(a){ return object.prototype.tostring.call(a) === “[object array]”;};
用google i/o演講里的話來說:更魯棒(robust)的對象系統
約翰同學的講解:http://ejohn.org/blog/objectgetprototypeof/
支持:firefox3.5
替代/過渡:object.__proto__ 或 object.constructor.prototype
約翰同學的講解:http://ejohn.org/blog/ecmascript-5-objects-and-properties/
支持:無
替代/過渡:object.create和object.keys可以自己實現
對象屬性的訪問控制
約翰同學的講解:http://ejohn.org/blog/ecmascript-5-objects-and-properties/
支持:無
替代/過渡:object.defineproperties其實相當于jquery.extend,用來實現mixin
python和ruby里都有的屬性訪問方法
mdc文檔:https://developer.mozilla.org/en/core_javascript_1.5_guide/creating_new_objects/defining_getters_and_setters
支持:firefox 2.0+, safari 3.0+, google chrome 1.0+, opera 9.5+
替代/過渡:
非標準,firefox1.5里的舊方法
支持:firefox 2.0+, safari 3.0+, google chrome 1.0+, opera 9.5+
標準
msdn文檔:http://msdn.microsoft.com/en-us/library/dd229916(vs.85).aspx
支持:ie8+ (只能對dom使用)
es5的嚴格模式,刪除了舊版本中容易引起問題的元素,并且會顯式的報錯,方便調試
約翰同學的講解:http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/
支持:無
替代/過渡:……從現在開始養成嚴謹的編程習慣
傳遞函數的引用時,綁定this
支持:無
替代/過渡:prototype http://www.prototypejs.org/api/function/bind
iso-formatted dates
支持:無
替代/過渡:datejs http://code.google.com/p/datejs/
支持:firefox3.5
替代/過渡:各種正則實現 http://blog.stevenlevithan.com/archives/faster-trim-javascript
===================廢話又開始的分割線=======================
其實我把這個東西發出來是希望能促進創新的氛圍,讓更多人認識到很多新技術已經進入到“實用”階段。
如果只是想做個實驗性的webgame,或是只能用于特定平臺的應用(比如iphone,greasemonkey),firefox3.5+webkit的支持就已經足夠罷。
如果不能無視主流平臺,有很多技術能讓你gracefully degrade(優雅的退化)或者選取不同的方法實現兼容的接口。
如果你等不及ie x在若干年后實現xx,希望提前享受福利,有些技術的設計原則就是讓你能在沒有native支持的情況下可以自己實現一模一樣的功能或語法糖(syntactic sugar),比如es5對象的繼承和訪問控制,從es4/actionscript3時期那些老土的關鍵詞(class extands private static)改成了object.create(p, attrs).defineproperty(o, n, attrs).defineproperties(o, attrs).freeze().getownpropertynames().map(fn),不會只是為了酷炫罷……
很多人都喜歡抱怨“我這輩子都沒機會用html5”,但是只要把視線從自己腳下那巴掌大塊地移開看看別處,會發現世界其實一直都在改變喔xd
新聞熱點
疑難解答