已经习惯了苹果官方的高冷,此次,苹果依旧没有更新任何与 Safari 或者 iOS 相关的文档,因此下面的全部数据和资料都是基于我本身的测试和 WWDC 上公布的信息。javascript
Image Source Sets
和动态PNGAPNG
Shapes
,支持小数单位minimal-ui
属性Yosemite
上的远程调试相比其余移动端上的浏览器,iOS 8并无支持有些功能:css
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
。html
对于web开发者来讲,不一样的不只仅是尺子上的大小。还包括默认viewport
(关乎 width=device-width
的设置),像素比(关乎高清图片的应用),icon图标大小和登陆页的图片大小。前端
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” 。html5
正在读这篇文章的你应该已经知道java
直到上周,全部的 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%
的内容。也许这并非什么大问题,可是你也许仍是得检查下你的网站是否适配。node
适配新iPhone,你可使用下面两段<meta>
ios
<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%)。css3
所以,若是你使用一个3x
的图给高清的安卓设备,一样这样图也会适配 iPhone 6 Plus 可是iPhone 的浏览器在渲染在屏幕以前首先会调整图片大小。git
iOS特有的图标大小,在 iPhone 6 plus上是180×180
,iPhone 6 上则仍是老的120×120
。
适配iPhone 6 plus,则须要在中加上这段
<link rel="apple-touch-icon-precomposed" sizes="180x180" href="retinahd_icon.png">
若是你的webapp有一个启动图,那么你又得增长两行代码适配新 iPhone 了。
iPhone 6对应的图片大小是750×1294
,iPhone 6 Plus 对应的是1242×2148
。
<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都会返回整数值。
与此同时,这也意味着你能够用半个像素单位了。
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>
标签中使用新的属性。
<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
。
<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。
不支持文件上传!!!全部的文件上传都失效了,你能选择或者拍张照片,可是js不能得到任何数据。HTML
或者XMLHttpRequest
的POST
请求也不行。可是这个问题可是在桌面启动的app没发生。
WKWebKit:在新的引擎不能读取本地文件是个大问题,因此对于混合app来讲,还得使用老的UIWebView
。
window.prompt
可能会致使Safari崩溃input
和labels
输入时,无论用。(当输入的时候,label再也不发音)iframes
中,touch
事件没有被监测到。Timers
和requestAnimationFrame
回调没有执行。本文原文为“iOS 8 and iPhone 6 for web developers and designers: next evolution for Safari and native webapps”
译者 @罗罗磊磊,转载请注明。
iOS 8给web前端带来的变化仍是很使人欣喜的,更强大的性能,更强大的浏览器和内核,更开放的接口,能够预见在针对iOS的web应用会有一个更大的用武之地。
文章很长,大量技术词汇,翻译了半天,若译文有错误或者不妥之处,欢迎指正和提供建议。