文章整理自 Safari on iOS 4.2: Accelerometer, WebSockets, SVG, AJAX2 & better HTML5 support
事實上,Apple還沒有更新Safari文檔。這裡的信息只是基於在Safari(注:文中的Safari指iOS移動設備中的Safari浏覽器,不包括PC和Mac機中的Safari)自身的JavaScript研究和測試上。具體來說,檢測到的新特性如下:
或許你已經知道,iOS設備都有加速傳感器(還有其它的,比如磁力及和陀螺儀),但是直到現在,網頁開發者沒有操作這些傳感器的權限。Safari現在支持 DeviceOrientation API (W3C草案),不過,雖然看起來全部的API都是被支持的(包括ondeviceorientation 和ondevicemotion事件),但是在測試中,我只能成功的使用加速器的數據。
如果你已經有了iOS 4.2的設備,可以用Safari浏覽器訪問 ad.ag/jtjdmj 自行測試。
要想檢測每秒鐘50次加速計數據變化,你需要在window全局對象監聽ondevicemotion事件,然後在DeviceOrientationEvent參數上使用accelerationIncludingGravity屬性。它有三個值:x、y和z,分別代表每個坐標上的加速度g (gravity,重力)。你可以將加速計數用於游戲,效果或者CSS動畫中。
1 2 3 4 5
window.ondevicemotion = function(event) { // event.accelerationIncludingGravity.x // event.accelerationIncludingGravity.y // event.accelerationIncludingGravity.z }
另一個大更新是對WebSockets的支持。WebSockets是一個尚處於草案狀態的W3C HTML5 API,允許JavaScript使用一種開放的雙向、雙全工連接到一台服務器,通過TCP sockets。這對於聊天和實時應用來說是一個非常好的消息,因為可以大大減少AJAX周期性調用。
你將需要一台能夠通過一種HTTP握手理解新的WebSocket協議的服務器。如果服務器不支持WebSocket或者由於代理/網關的原因,你將還要依賴一種fallback機制。
其實webkit對HTML5表單的支持相對已經比較不錯,現在iOS 4.2的Safari開始支持 required屬性以及 :invalid CSS偽類。這樣的話,下面的代碼將展示一個文本框在輸入正確的時候顯示綠色背景,而不正確的時候顯示黃色背景。
<style> input { background-color: green; color: white; } input:invalid { background-color: yellow; } </style> <input type="text" required>
名為FormData對象,這允許我們很方便的通過Ajax發生表單數據。
iOS4.2引入了 AirPrint,一種無限打印方案。也就是說,我們現在可以使用 window.print 來在Safari中調用打印對話框了。
Safari現在支持 二進制類 (Blob Class)和許多整數類型的集合,比如 Float32Array,Int8Array,Uint8Array,Int16Array Unit16Array,Int32Array以及Uint32Array等在Typed Arrays規范中定義的數組。更多信息可訪問 Firefox 網站。
在新的動作類事件中,我們現在可以使用HTML 5新的 onhashchange事件用於檢測AJAX類webapp中URL中散列(#)之後的變化,以及HTML5草案規范中的invalid、onbeforeload 以及onpopstate事件。
現在,我們也可以使用window.captureEvents和window.releaseEvents來監聽全局方法中的事件。
iOS支持作為獨立文件的SVG以及內聯SVG(使用svg標簽)。現在我們可以直接在我們的文檔中創建SVG文檔——使用超過20個SVG___類,比如SVGDocument,SVGImage等…
對於Canvas,現在支持imageData data-type,一種從JavaScript以像素級操作圖片的方法。
PS:由於我本人並沒有iPhone、iPad啥的,所以沒有辦法對文中的內容進行逐個測試,如果你發現了某些錯誤或者新的內容,請通過留言提交,我會及時更新本文,多謝——神飛