喜大普奔,喜極而泣,喜當爹,隨着iPhone 6和iPhone 6 plus的上市,ios 8終於在上週推送更新了。新的設備,新的分辨率。接下來這篇文章介紹下 iOS 8有哪些變化。javascript
已經習慣了蘋果官方的高冷,此次,蘋果依舊沒有更新任何與 Safari 或者 iOS 相關的文檔,因此下面的全部數據和資料都是基於我本身的測試和 WWDC 上公佈的信息。css
Image Source Sets
和動態PNGAPNG
Shapes
,支持小數單位minimal-ui
屬性Yosemite
上的遠程調試相比其餘移動端上的瀏覽器,iOS 8並無支持有些功能:html
Media queries
iPhone 6 和 iPhone6 Plus 是蘋果繼 iPhone 5 後的又一款不一樣尺寸和不一樣分辨率的設備。iPhone 6 的參數爲4.7寸
大小和750×1334
物理分辨率的屏幕(dpi 值與iphone 5s 相同),iPhone 6 Plus則是5.5寸
和1080×1920
分辨率(401 dpi)的屏幕。不走尋常路的蘋果給這兩分辨率取名叫Retina HD屏
,嗯哼,比Retina
多了一個HD
。前端
對於web開發者來講,不一樣的不只僅是尺子上的大小。還包括默認viewport
(關乎width=device-width
的設置),像素比(關乎高清圖片的應用),icon圖標大小和登陸頁的圖片大小。html5
iPhone 6 | iPhone 6 Plus | |
---|---|---|
尺寸 | 4.7」 | 5.5」 |
Viewport’s device-width (in CSS pixels) | 375 | 414 |
Viewport’s device-width (Android設備同分辨率參考) | 360 | 400 |
Device Pixel Ratio 像素比 | 2 | 3(近似值) |
Rendered Pixels 渲染像素 (默認 viewport size * dpr) | 750×1334 | 1242×2208 |
Physical pixels 物理像素 | 750×1334 | 1080×1920 |
對於新 iPhone 的屏幕尺寸,推薦一篇文章「iPhone 6 Screens Demystified」 。java
正在讀這篇文章的你應該已經知道node
直到上週,全部的 iPhone 和 iPod 使用的都是320px
的屏幕寬度。iPhone 6 和 Plus 相比前代更加寬,給咱們帶來了更多的空間,蘋果終於決定加寬瀏覽器寬度了。可是蘋果奇葩的是使用了一套特殊的屏幕像素值。大部分4.7~5寸
的安卓設備的viewport
寬設爲360px
,iPhone 6上倒是375px
,大部分5.5寸
安卓機器(好比說三星Note)的viewport
寬爲400
,iPhone 6 plus 上倒是十分怪異的414px
(╮(╯_╰)╭ 蘋果你這樣折騰是鬧哪樣啊)。這意味着相比一樣尺寸的安卓機器,iPhone 6用戶大概要少看4%
的內容。也許這並非什麼大問題,可是你也許仍是得檢查下你的網站是否適配。ios
適配新iPhone,你可使用下面兩段<meta>
css3
1
2
|
<meta name=
"viewport"
content=
"width=375"
>
<meta name=
"viewport"
content=
"width=414"
>
|
iPhone 6與 iphone 5同樣,像素比都是2
,可是另外一方面 iPhone 6 401
的dpi
真實的像素比值應該大約是2.60
。爲了解決這個問題,蘋果又整了個新概念rendered pixels 渲染像素
,若是像素比是3x
,那麼理論上一個css寬設爲414px
的屏幕應該擁有1242px
的物理像素(現實中是1080px,小了13%)。git
所以,若是你使用一個3x
的圖給高清的安卓設備,一樣這樣圖也會適配 iPhone 6 Plus 可是iPhone 的瀏覽器在渲染在屏幕以前首先會調整圖片大小。
iOS特有的圖標大小,在 iPhone 6 plus上是180×180
,iPhone 6 上則仍是老的120×120
。
適配iPhone 6 plus,則須要在中加上這段
1
|
<link rel=
"apple-touch-icon-precomposed"
sizes=
"180x180"
href=
"retinahd_icon.png"
>
|
若是你的webapp有一個啓動圖,那麼你又得增長兩行代碼適配新 iPhone 了。
iPhone 6對應的圖片大小是750×1294
,iPhone 6 Plus 對應的是1242×2148
。
1
2
|
<link rel=
"apple-touch-startup-image"
href=
"launch6.png"
media=
"(device-width: 375px)"
>
<link rel=
"apple-touch-startup-image"
href=
"launch6plus.png"
media=
"(device-width: 414px)"
>
|
目前位置,全部升級到iOS 8的 iPhone都使用一樣的UserAgent
,因此咱們暫時尚未辦法在服務端判斷這是什麼設備,固然,經過JS和Media Queries
咱們仍是能夠經過技巧來判斷的。
兩個最重要的Api支持終於登陸了iOS,分別是WebGL
和IndexedDB
,與此同時,Safari也開始支持Web Cryptography和Navigation Timing。
WebGL
支持3D模擬,而且是瀏覽器默認開啓。對於遊戲開發者來講,這是一個好消息,更加豐富的交互和形式將在網頁上出現。
你能夠在微軟的這個FishGl測試下 iOS 8 Safarai上進行3D渲染的效果。
IndexdDB是W3C繼起用WebSQL
後推出的新的標準,隨着 iOS支持 IndexedDB
,咱們能在不一樣的手機瀏覽器上使用同一套數據庫API。
Navigation Timing API對於web性能優化來講是個好消息。經過這個API咱們能過測量更加精準的加載渲染時間,優化網頁的用戶體驗。
iPhone處於橫屏的時候,iPad(橫豎都可),若是你用手指捏放屏幕(好比說你想放大網頁),你會進入一個標籤預覽模式
,用起來卻是挺方面,但是可能會與你在網頁上使用的gesturechange
事件所衝突,若是你要使用自定義縮放事件,首先愛你你得event.preventDefault()
來阻止瀏覽器的默認事件。
六個月前,蘋果推出了了Minimal UI mode《iOS 7.1的Safari爲meta標籤新增minimal-ui屬性,在網頁加載時隱藏地址欄與導航欄》,iOS 8更新後則又取消了這個,依舊高冷女神範,沒說爲何。
Safari現在支持自動補全表單,而且當Safari檢測到你要填寫的是信用卡的時候他會容許你開啓攝像頭直接掃描實體信用卡。
於此同時,Safari也支持autocomplete
屬性,參考latest spec。這意味着若是你在一個登陸頁面,Safari能夠調用Keychain裏的數據自動填寫用戶名賬號、密碼。Luis Abreu寫過一篇關於iOS 8安全和隱私相關的文章,推薦能夠看看
若是你的網站提供了RSS訂閱,iOS 8用戶能夠直接在瀏覽你網頁的時候在書籤欄打開他。就是那個@
圖標裏面有個訂閱
的按鈕,雖然說有點小低調,但好歹仍是有嘛 ノ( ´ ▽ ` )ノ。
如今地址欄和工具欄就變成半透明瞭。在 iOS 7上只有地址欄是半透明的。這意味着初次加載的時候網頁可視區域變得更大(包含了底部的工具欄)。
iOS 7之後,使用iPhone上的Safari瀏覽網頁,滾動的時候會自動隱藏工具欄(ipad不會),iOS 8 ipad也有了這個細節上的變化(橫豎都有)。不一樣的是,在橫向模式的時候,iPad上面還有一小條,iPhone則是全屏。
除此以外,Safari在橫屏模式開啓側邊欄會保持原有的viewport
大小,只會改變aspect-ratio
Safari終於支持收藏夾裏和書籤裏的網頁附帶網站的icon圖標。當你在地址欄輸入關鍵字搜索的時候,一樣會展現網站的icon(ipad剛剛我測試了下沒有)。
若是你同時使用Mac和iPhone,當你在iPhone上瀏覽一個網頁,你能夠在你的Mac上(須要Yosemite)繼續閱讀(今年WWDC上專門演示了這個功能,還得等到Yosemite的正式更新)。
若是你想讓用戶在網頁上,無經肯定,就直接跳轉到Apple Store下載你的應用,那是不可能的。想讓網頁與本地應有之間有交互,iOS 8帶來更多的便捷性。
此次iOS 8更新,最使人激動的消息就是混合應用與 Mac 上共同了一套 API,意味着iOS 上也能有更多的功能,Mac 和 iOS的通訊交互,還有:
postMessage
的交互Nitro
引擎,相比前代4x
速度的js執行速度。新的 webview(WKWebkit)是新框架(WebKit.framework)的一部分,與老的UIWebView
並非徹底兼容。可是老的webviwe依舊保留,因此老的webapp仍是會使用老的webview。
目前的GM版本(公開版也是同樣的)依舊存在本地文件沒法上傳的bug,對於一些混合應用(例如Cordova PhoneGap)來講,這(多webviwe)算是個好消息。
這就意味着,目前 iOS 8,擁有4個web引擎,固然,也意味着兼容性和bug都是有差別的。 1. Safari 2. Web.app (使用full-screen 桌面應用) 3. UIWebView (老) 4. WKWebView(新)
你能夠在 HTML5Test.com這裏測試下你webapp的性能。
對於那種包殼應用和webviewe應用來講,這個變化是十分重要的。好比說iOS上的Chrome和Facebook本地應用中的網頁應用(咱們獵豹的電池醫生、手機獵豹也大量應用webview)。根據一份報告,11.5%
的iOS流量是來自基於webview
的應用。
iOS 8上的Safar 是第一個支持插件和拓展的系統預裝瀏覽器(Firefox OS也許也算是一個)。從iOS 8開始,本地應用能夠拓展到與 Safari 交互,主要經過兩種方式:分享(Share extension)和動做(Actions)。Action 能夠與DOM交互,意味着能夠本地應用能夠直接修改DOM元素。
全部的插件都須要用戶主動選擇來觸發(須要點擊分享中不一樣的按鈕來觸發),暫時尚未能夠自動運行的插件。
舊版 Safari 的分享 菜單一樣被基於 JavaScript 的插件所替代。好比說添加到桌面
現在就是一段 Safari 中的 js 代碼。
除了蘋果在WWDC上演示的功能,Safari的這個改進意味着瀏覽網頁會有極大的體驗改善。好比說你能夠在Safari直接調用1Password或者LastPassword 保存的賬號密碼登陸,若是你的iPhone 有 Touch ID指紋識別,你甚至能夠直接指紋驗證登陸。
Pocket.com 已經聲明即將推出針對 iOS 8的插件。
此次safari新增了不少html5,css3的支持
APNG格式是PNG位圖動畫的拓展,但未得到PNG組織官方的承認,與GIF有點相似(只不過GIF是基於JPG的),這意味着咱們能夠製做32位全綵半透明的動態圖。
若是你作過移動端的項目,你必定知道iOS7以及之前都不支持scrooll
事件,iOS 8 終於支持滾動事件,這下你們終於能夠在iOS上用到視覺滾差相關的js和css了,可是不保證徹底適配。
這個支持讓咱們能夠作出下拉刷新和無限下拉下載的效果。
Safari如今CSS單位從整數轉成了浮點數。這意味着CSS對象模型中諸如offsetTop
和ClientWidth
可能會取得小數值,以前老的iOS都會返回整數值。
與此同時,這也意味着你能夠用半個像素單位了。
1
2
3
|
div {
border-width:
0
.5px;
}
|
SVG沒怎麼玩過,這個屬性也不懂,你們先看英文吧。
Fragment identifiers from SVG is a method to link to one specific fragment or portion of an SVG instead of the root element. This feature allow us to sprite SVG images in one file taking advantage of one HTTP request and caching. Similar to CSS Sprites, but with SVG images instead and with ids instead of positions.
利用mix-blend-mode
這個新屬性支持咱們把不一樣形狀的不一樣元素合成到一張圖片,這是Adobe在HTML5方面新出的一個功能。在他們的網站上你能看到演示的DEMO和文檔。
從Adobe官網的例子演示來看,彷佛變形是生效了,合成並無生效(我Mac Chrome也沒生效)。
CSS 形狀也是Adobe新出的一個特性。對於這個特性,推薦下W3Cplus上的《CSS Shapes 101》。我的仍是很看好這個特性的推廣和應用的,能給咱們的網頁設計帶來更多的可能性。
有了解響應式圖片的開發者對這個應該不陌生,隨着高清屏的普及,針對不一樣的分辨率作適配是一個須要注意的問題,蘋果iOS 8 支持Image Source Set Spec
,意味着能夠在<img>
標籤中使用新的屬性。
1
|
<img src=
"lores.png"
srcset=
"hires.png 2x, superhires.png 3x"
>
|
在上面這段代碼的例子中,iPhone 6 Plus 的像素比是3x
,它會加載superhires.png
這張圖片,而iPhone 5s,iPhone 6 則會加載hires.png
這種圖,其他的則加載lores.png
。可是遺憾的是,iOS 暫時還不支持<picture>
元素。
<template>
對於webapp來講十分有用,<template>
中能夠包含一段css
或者js
(不會被瀏覽器解析),實際應用中,咱們能夠利用<template>
中的代碼建立一個新的node
。
此次更新對視頻播放相關的加強了許多,iOS8開始支持全屏播放
,Meta Data Api
和CSS layering
(話說你們知道HTML5 Video元素是能夠經過CSS來控制吧?)
Safari不支持全屏播放API,即便是iOS8也不例外。可是能經過一個特殊的方法解決這個問題,在<video>
元素中增長一段js
。
1
|
<input type=
"button"
value=
"Go Full screen"
onclick=
'document.querySelector("video").webkitEnterFullScreen()'
>
|
Safari開始支持<video>
的preload="metadata"
,可讓瀏覽器觸發loadedmetadata
事件方便開發者控制。
我能夠經過css控制其餘元素放在<video>
以前。
ECMAScript 6
,包括Promises
, Iterators
, Maps
, For-of
, Weak Maps
等等。scroll
事件:很少說了,上面介紹過。window.doNotTrack
window.currentScript
9月18更新:
有開發者發現:iPhone 5上的click
事件300ms
延遲已經取消了(只是Safari),可是其餘設備上的Safari和 WebViews 上還有,延遲依舊在 iPod touch, iPads 和iPhone 5s上。
說了iOS8和iPhone 的更新,再來講說目前發現的 Bug。
HTML
或者XMLHttpRequest
的POST
請求也不行。可是這個問題可是在桌面啓動的app沒發生。UIWebView
。window.prompt
可能會致使Safari崩潰input
和labels
輸入時,無論用。(當輸入的時候,label再也不發音)iframes
中,touch
事件沒有被監測到。Timers
和requestAnimationFrame
回調沒有執行。iOS 8給web前端帶來的變化仍是很使人欣喜的,更強大的性能,更強大的瀏覽器和內核,更開放的接口,能夠預見在針對iOS的web應用會有一個更大的用武之地。
文章很長,大量技術詞彙,翻譯了半天,若譯文有錯誤或者不妥之處,歡迎指正和提供建議。