return false; }function messageHandler(e) { if(checkWhiteList(e.origin)) { processMessage(e.data); } else {
// ignore messages from unrecognized origins } }
window.addEventListener(“message”, messageHandler, true); 2.6.2、XMLHttpRequest Level 2
HTML5中定义了XMLHttpRequest Level 2,它有两方面的增强:跨域通信,通信进度通知(progress events)
1、跨域通信:
XMLHttpRequest Level 2使用跨域资源共享Cross Origin Resource Sharing(CORS)来提供跨越多个域的通信。所有跨域的请求都有Origin消息头,它保存发起请求的域的信息。Origin被浏览器保护无法在 代码中作出修改。Origin消息头和PostMessage消息事件中的origin本质上相同。Origin和传统的referer消息头不同的地方 在于,referer是完整的URL,包括文档路径(path)。由于文档路径可能包含隐私信息,所以有时候为保护用户隐私,浏览器并不会发送 referer消息头。但是只要可能,浏览器总是会发送Origin消息头。
CORS标准要求一个credentials的请求(a request with credentials)或非GET、
POST的请求,一定要发送perflight选项给服务器,所以跨域通信可能需要支持CORS的服务器。
2、进度通知:
XMLHttpRequest Level2发送消息的时候除了传统的readyState之外,还提供了如下进度通知相关的事件:loadstart、progress、abort、error、load、loadend。 2.6.3、执行跨域请求:
var crossOriginRequest = new XMLHttpRequest();
crossOriginRequest.open(“GET”, “http://www.example.net/stockfeed”, true); 2.6.4、使用进度通知事件:
crossOriginRequest.onprogress = function(e) {
var total = e.total; var loaded = e.loaded;
if (e.lengthComputable) { // do something with the progress information } }
crossOriginRequest.upload.onprogress = function(e) {
var total = e.total; var loaded = e.loaded;
if (e.lengthComputable) { // do something with the progress information }
}
三、HTML5前景
3.1、HTML5 对手机很合适
1、基于网页和HTML 5的软件“一次撰写,到处适用”。 2、调用本地数据等资源的HTML 5软件非常棒。
3、HTML 5可以成为帮助软件开发者节省手机开发的时间和成本。
3.2、HTML5是移动互联网的关键
浏览器软件开发商Opera认为,移动浏览器与HTML5相结合将使基于Web的应用程序更好地与本地应用程序竞争。据Opera共同创始人Jon von Tetzchner说,分散与本地应用程序的结合对于消费者和开发商都不是好事。
von Tetzchner说,对于消费者来说,转换到采用不同操作系统的新型手机将更加困难。同时,要保留自己所有的应用程序,开发商在为不同的平台开发应用程 序的时候计划必须要从头开始进行开发。
vonTetzchner说,利用Web是解决这两个问题的方法。Opera寄希望于HTML5将使基于Web的应用程序比本地应用程序更有竞争力。浏览器并不是设计用来
制作应用程序的,但是,HTML5的推出改变了这种情况。如果你要制作一个实际的应用程序而不是一个网站,这是很重要的。
他说,开发人员将能够增加丰富的图片和本地存储,从而让基于Web标准的应用程序像本地应用程序一样工作。
HTML5的应用仍在进行之中,特别是在移动浏览器方面。Opera的Mobile 10和Mini5支持HTML5的某些部分,包括图片功能。然而,仍然缺少对视频和本地存储等重要组件的支持。
3.3、HTML5功能计划
不管苹果如何宣扬原版应用的优势,我们还是可以看到谷歌正迎头赶上,逐步缩小与苹果的差距。以下是原版应用与HTML5在某些功能上的对比优势,但需要指 出的是,大部分内容是HTML5已经可实现的功能,还有一些方面是HTML5正在追赶的功能,另外一些则是HTML5计划赶上的功能,并且这一情况在最近 一两年内就可能发生。
1、控触/手势界面(Touch/gestural interfaces)
Sencha公司等HTML5框架服务供应商已在运用手势控触技术。图片轮播、scrolling lists、disclosure panels和相关小部件等需通过触摸、划动手指来控制的UI组件,均可在HTML5网页上实现。Sencha等供应商的解决方案还能帮助去除返回按钮、刷新按钮、传送链接、书签以及其他台式电脑网页无法完整翻译到移动网页的“错误性”功能。
2、Visual Scale
现在HTML5已可通过持续回放解决这类问题,但较短的声效音频同步还是得在浏览器中才能实现。
3、Graphics & FX
原版应用在某些方面的确更胜一筹,在图像质量要求较高的内容上尤其如此。高图象质量的游戏在HTML5上的渲染效果暂时还比不上原版应用。不过 Sencha等供应商的技术却能够有效提高运行速度,例如通过嵌入一个地图组件,加快地图的加载速度,这可以解决谷歌地图或其他网站加载速度过慢的问题。
4、访问视频文件
HTML5可处理从Android移动设备上的网页抓取来的图片或照片(译者注:据称最新版Androidr操作系统Honeycomb的运行设备已可实现这一功能,但iPhone平台还不行)。
5、访问通讯录
多数手机应用才刚开始通过云服务,而非设备客户端获取通讯录文件夹,HTML5可以解决这一问题。
6、访问加速计
这也是HTML5可以实现的功能。 7、访问蓝牙功能
这是HTML5暂无法解决的问题之一。但要知道,即使是原版手机应用,其访问蓝牙的功能也非常有限。
8、离线运行功能
如果得到了用户许可,开发者可以使用50MB的数据库空间,以便HTML5网页应用在离线状态下运行。
9、应用商店服务功能(应用检索、更新、支付&信用)
HTML5应用不但可通过HTML5及Chrome应用商店等渠道销售,甚至还可以通过苹果App Store、Android Market或黑莓App World发布,前提是得给它们披上一层Nimblekit或Webworks之类的原版应用“马甲”。
10、在背景执行和发送通知
HTML5已推出针对这些功能的技术说明,但它们还没有被主流浏览器所采纳。如果套上一层原版应用的外壳,HTML5可以实现这一点,这表明它仍需借助外力才能执行这种功能。
11、运营模式
广告赞助应该是很适合HTML5的运营模式,虽然移动网络已有不少广告平台,但实际上移动广告的效果并不理想,所以还应该考虑添加订阅、虚拟商品交易等服务的支付系统。HTML5可以选择PayPal和谷歌API,但这两者的用户体验仍然欠佳,不过Zong和Boku等公司已推出很便捷的计费解决方案。
四、Wekbit介绍
WebKit是一个开源的浏览器引擎,与之相对应的引擎有Gecko(Mozilla Firefox 等使用)和Trident(也称MSHTML,IE 使用)。同时WebKit 也是苹果Mac OS X 系统引擎框架版本的名称,主要用于Safari,Dashboard,Mail 和其他一些Mac OS X 程序。WebKit 前身是 KDE 小组的 KHTML,WebKit 所包含的 WebCore 排版引擎和 JSCore 引擎来自于 KDE 的 KHTML 和 KJS,当年苹果比较了 Gecko 和 KHTML 后,仍然选择了后者,就因为它拥有清晰的源码结构、极快的渲染速度。Apple将 KHTML 发扬光大,推出了装备 KHTML 改进型 WebKit 引擎的浏览器 Safari。
4.1、简介
WebKit是开源的Web浏览器引擎,苹果的Safari、谷歌的Chrome浏览器都是基于这个框架来开发的。WebKit 还支持移动设备和手机,包括iPhone和
Android手机都是使用WebKit做为浏览器的核心。
WebKit 是一个开源项目,其起源可追溯到 K Desktop Environment (KDE)。WebKit 项目催生了面向移动设备的现代 Web 应用程序。虽然设备本身的能力和形态因素都相当重要,但移动用户最热衷的仍然是内容。如果移动用户可用的内容只是 Internet 用户可用内容的一个很小的子集,那么用户体验充其量也只能划分为二等。
WebKit 还应用在了桌面的 Safari 浏览器内,该浏览器是 Mac OS X 平台默认的浏览器。不管我们讨论的是桌面版本还是 iPhone 或 Android 上的浏览器引擎,WebKit 均优先支持 HTML 和 CSS 特性。实际上,WebKit 还支持尚未被其他浏览器采纳的一些 CSS 样式这些特性正在得到 HTML5 规范的考虑。
HTML5 规范是一个技术草案集,涵盖了各种基于浏览器的技术,包括客户端 SQL 存储、转变、转型、转换等。HTML5 的出现已经有些时间了,虽然尚未完成,但是一旦其特性集因主要浏览器平台支持的加入而逐渐稳定后,Web 应用程序的简陋开端将成为永久的记忆。Web 应用程序开发将成为主导,并且不只是在传统的桌面浏览器空间,还将在移动领域。
4.2、内核引擎
WebKit 引擎比 Gecko 引擎更受程序员欢迎的原因,除了其引擎的高效稳定,兼容性好外,其源码结构清晰,易于维护,是一个重要的原因。而 Gecko 的可维护性就差多了。
现在浏览器的内核引擎,基本上是四分天下: Trident: IE 以Trident 作为内核引擎; Gecko: Firefox 是基于 Gecko 开发;
WebKit: Safari, Google Chrome,搜狗浏览器 基于 Webkit 开发。
Presto: Opera的内核,但由于市场选择问题,主要应用在手机平台--Opera mini
WebKit 内核在手机上的应用十分广泛,例如 Google 的手机 Gphone、 Apple 的 iPhone, Nokia’s Series 60 browser 等所使用的 Browser 内核引擎,都是基于 WebKit。
4.3、应用平台
在应用于Mac Os上的Safari之后,Webkit很快被广泛地移植到其他系统平台:
1、iPhone OS:
2007年6月29日,iPhone上市,WebKit进入iPhone OS平台,而且立即成为iPhone OS平一无二的排版引擎。
2、Android:
Google 开发的手机操作系统Android中内置的浏览器也是采用的WebKit引擎。
3、Nokia S60平台:
诺基亚公司将WebKit移植到Symbian S60操作系统中,并开发了基于Webkit的手机浏览器“Web browser for S60”,广泛用于诺基亚、三星、LG等基于Symbian S60操作系统的手机中。
4、Web OS:
Palm 推出第一款基于WebKit的操作系统,Palm Pre是第一款基于该系统的手机产品。
5、Linux:
尽管WebKit的原型K内核是由Qt写成,但Linux下目前最受瞩目的WebKit项目却是Gnome领导的WebKit/Gtk+。随着奇趣科技于2008年6月被Nokia收购,Qt方面也加快了WebKit的“回归”进程。
Midori,Google Chrome,GNOME的Epiphany、KDE的Konqueror,Arora是现在Linux系统下主要的Webkit内核浏览器。
5、Windows:
Webkit内核在Windows上发展最晚,Safari(for Windows),Midori,Google chrome,具有双核模式的傲游3和搜狗浏览器2(高速模式下使用Webkit核心)是最为常见的Webkit浏览器。2009年推出的safari和 Chrome以及2010年推出的搜狗浏览器V2.0Beta和傲游3.0beta都使用的webkit引擎完全通过了acid3测试满分! 6、浏览器:
2008年9月2日,谷歌公司发布的第一个版本Google Chrome(中文名为谷歌浏览器)就采用了Webkit引擎。
2009年,广受关注的Google手机的自带的浏览器也是Webkit内核,加载网页速度比IE手机浏览器快了近一倍。
2010年1月24日,搜狗公司发布搜狗浏览器V2.0Beta,采用Webkit引擎,并支持与IE引擎互相切换。
2010年1月24日,傲游3.0beta发布。
4.4、其他相关
4.4.1、Wekbit做了什么
作为浏览器的内核,Webkit做了哪些工作?为了了解这些,我们可以从输入输出的角度来看一个 Web浏览器为我们做了哪些工作。先看一个简单的例子,Web浏览器的输入是一个HTML文档,输出则是一个我们用眼睛所看到的一个
Web页面, 就普通用户而言它的输入和输出就是这么简单,如下图所示。
Webkit的输入是web 文档,输出是一些看不见的模型,浏览器上层借助于这些模型来绘制出我们所看到的实际页面。 4.4.2、Wekbit组成
Webkit实际上包含三大部分,至少从代码结构上来说是这样的,当然,如果细分的话还能够划分出更多的模块。如下图所示
其中,WebCore是Webkit的核心部分,它实现了对文档的模型化,包括了CSS, DOM, Render等的实现, JavaSript Core显然是对JavaSript支持的实现。而橘黄色标注的Webkit部分包含了很多不同平台对Webkit封装的实现,即抽象出了与浏览器所能直 接对应的一些概念的实现,如,WebView,WebPage, WebFrame等。这三部分共同构成了Webkit, 在源码中,它们分别对应这个这三个目录, 即Webkit三大部分为WebCore, JavaSript Core,Webkit。 4.4.3、应用程序如何利用Webkit的
从下图可以看出,利用Webkit的应用程序的位置处于Webkit模块之上,应用程序并不直接和WebCore以及JavaScript Core来打交道,也不需要和它们打交
道,而是同我前面提到过的Webkit模块来交互,从而屏蔽了WebCore和JavaSript Core部分。Webkit模块实际上抽象出了大多数应用程序所需要的那一部分,这里所说的大多数应用程序其实就是指的浏览器, 对于实现一个浏览器而言,Webkit模块所提供的接口已经足够。不过对于某些应用,可能得对其实施一定的改造,但是话又说回来,Webkit本来就是被设计成为Browser的内核而被实现的。
看到这里,也就是说如果我们要想利用Webkit来实现一个功能完善Browser或其他类浏览器应用程序的话,你只需要了解Webkit模块部分就足够了,更确切的说只需要了解它所提供的接口就够了。事实上,大多数平台,如果采用了Webkit内核作为浏览器内核组件的话,所提供的对应文档部分都 是关于Webkit模块所提供的接口的描述。很多平台都提供了Browser组件,其使用方法就像是其他可视组件一样,在应用程序中应用起来非常方便。比如,某平台提供了叫做WebView的可视化组件,我们就可以通过如下几行代码来展示一个网页, 使用的代码仅仅三行。
WebView *view = new WebView(); view->load(Url(\"http://www.google.cn\")); view->show();
以Webkit作为浏览器组件的平台有不少,包括Symbian S60, Android, Qt, GTK等等。