谈谈iOS的Safari和UIWebView

简介: 打开iOS4.3上的iPad Safari,再跟iOS6.1上的对比,也许你会觉得4.3没有标签栏,不够好用,但那个多窗口的设计却又非常酷。 iPhone上的Safari 4.3也和iPad差不多。

打开iOS4.3上的iPad Safari,再跟iOS6.1上的对比,也许你会觉得4.3没有标签栏,不够好用,但那个多窗口的设计却又非常酷。


iPhone上的Safari 4.3也和iPad差不多。这个多窗口的设计,影响了那个年代的第三方浏览器,UC啊,QQ啊都这么学。可是后来呢,iPad上的诸多第三方浏览器都是有标签栏的,Safari估计是被骂多了,在iOS5开始也这么干。

可是其实,iOS4的Safari代码里就已经有关于Tab的代码,可见Safari的重构优化是伴随着发布的,没做完的功能也一起发布,只是不公开。类似的,现在iOS6的代码里,有这么一个API:

-[WebView _setWebGLEnabled:(BOOL)arg1]

大家都知道Safari还没公开支持WebGL,这可否说明iOS7可能就要支持了呢?


iOS的Safari很明显是和Mac的Safari同源的,可是两者在共用代码的设计上,应该是经过了一个反复的设计阶段。早期的iOS Safari效率很低,特别是iPhone上的,打开一个网易首页都要load好半天。之前的研究可以确定iOS为了共用Mac的代码做了不少适配转接的工作,但这也必然带来性能的损耗。随着iOS的版本升级,这些适配带来的损耗在降低,可是Safari功能的升级又会引入更多代码,中和掉了。

看样子,iOS Safari是不会独立发展来获取性能的,要解决也很简单,等待硬件升级就好了……


iOS Safari没有用供普通开发者所使用的UIWebView。iOS的WebKit.framework还没成熟到像Mac那样给开发者使用,就用这个UIWebView作为门面了,它封装得不错,可是功能也实在太有限。市场上那些用UIWebView的第三方浏览器,或多或少地会用与UIWebView相关的non-public API,当然也会用到WebKit.framework的。虽然他们能以不违反apple的规则的方式来使用私有API,但apple肯定是能查出来的,睁只眼闭只眼罢了,难道还能扼杀掉所有第三方浏览器吗。

iOS Safari是直接使用UIWebBrowserView。 UIWebBrowserView和WebView其实有不少函数和设置项是为iOS Safari服务的,UIWebView默认不用。这必然的,还是尽量共用代码嘛,少要些人来维护更多代码。这相当于也是给第三方浏览器一些生存空间,利用Objective-C运行时的特性,自己去挖掘那些Safari用了但UIWebView没用的东西。例如保存form的账号密码,缓存网页,截图什么的。

当然了,Safari单独提供的额外功能,UIWebView是做不到的,例如阅读器,还有键盘上的页内查找。第三方浏览器只好用JavaScript或者后台服务器来做。效果参差不齐,就算比不上Safari也得做嘛,这风不跟就会落后了。


总之,Mac上的Safari版本号基本上是和iphone OS版本号对得上的,基本可以认为iOS Safari、UIWebView和Mac Safari是同步更新的,对用户而言是个好事。4核的iPad出来后,也许再没人说Safari慢了。

目录
相关文章
|
Web App开发 Android开发 iOS开发
iOS 调试:通过 Safari/Chrome 调试 WebView
iOS 调试:通过 Safari/Chrome 调试 WebView
4079 0
iOS 调试:通过 Safari/Chrome 调试 WebView
|
4月前
|
Web App开发 移动开发 Android开发
解决IOS Safari浏览器H5页面上下滑动时卡顿、页面缺失的问题
解决IOS Safari浏览器H5页面上下滑动时卡顿、页面缺失的问题
|
7月前
|
Web App开发 安全 JavaScript
关于 Safari back 按钮在 iOS 16 不能按照期望工作的问题分析
关于 Safari back 按钮在 iOS 16 不能按照期望工作的问题分析
51 0
|
8月前
|
Web App开发 JavaScript iOS开发
iOS Safari 浏览器 100vh 带有滚动条解决方案
iOS Safari 浏览器 100vh 带有滚动条解决方案
452 0
|
Web App开发 前端开发 JavaScript
WebKit 官宣 Safari 16 Beta 版 Web 新功能!开发者“你在强迫让 iOS 浏览器都用 Safari ?”
WebKit 官宣 Safari 16 Beta 版 Web 新功能!开发者“你在强迫让 iOS 浏览器都用 Safari ?”
319 0
WebKit 官宣 Safari 16 Beta 版 Web 新功能!开发者“你在强迫让 iOS 浏览器都用 Safari ?”
|
Web App开发 API iOS开发
WebKit 代码“曝露”苹果 Safari 新功能:iOS 15/16 或添自定义暗黑模式、弹窗等设置
WebKit 代码“曝露”苹果 Safari 新功能:iOS 15/16 或添自定义暗黑模式、弹窗等设置
204 0
WebKit 代码“曝露”苹果 Safari 新功能:iOS 15/16 或添自定义暗黑模式、弹窗等设置
|
Web App开发 JavaScript iOS开发
求助,主页面通过iframe访问ngnix中的子页面,子页面中利用调用js方法判断localstonge中是否有值,ios不可用,关闭阻止跨网站追踪,safari可用
紧急求助,主页面通过iframe访问ngnix中的子页面,子页面中利用调用js方法判断localstonge中是否有值,ios不可用,关闭阻止跨网站追踪,safari可用
|
Web App开发 iOS开发 开发者
mac 下用 safari 调试 iOS 端页面
第一步:打开iphone手机的开发者模式,流程是:【设置】->【Safari】->【高级】->开启【Web检查器】
536 0
mac 下用 safari 调试 iOS 端页面
|
JavaScript 前端开发 Android开发
iOS中UIWebView的使用详解
iOS中UIWebView的使用详解
172 0
iOS中UIWebView的使用详解
|
Web App开发 数据采集 Dubbo
使用Safari或者Chrome远程调试IOS Safari中的页面
使用Mac中的Safari或者Chrome远程调试IOS Safari中的页面
7572 0