<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>中文 &#187; 全国大学生软件创新大赛专栏</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/category/%e5%85%a8%e5%9b%bd%e5%a4%a7%e5%ad%a6%e7%94%9f%e8%bd%af%e4%bb%b6%e5%88%9b%e6%96%b0%e5%a4%a7%e8%b5%9b%e4%b8%93%e6%a0%8f/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Mon, 28 May 2012 14:23:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Metro Web应用开发中页面通信问题解决方法</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/05/15/metro-web/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/05/15/metro-web/#comments</comments>
		<pubDate>Tue, 15 May 2012 12:20:13 +0000</pubDate>
		<dc:creator>Dawei Cheng 程大伟 (Intel)</dc:creator>
				<category><![CDATA[Ultrabook]]></category>
		<category><![CDATA[全国大学生软件创新大赛专栏]]></category>
		<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[移动技术]]></category>
		<category><![CDATA[英特尔® 软件网络 2.0]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[PostMessage]]></category>
		<category><![CDATA[Win8]]></category>
		<category><![CDATA[Windows 8]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/05/15/metro-web/</guid>
		<description><![CDATA[最近在开发Win8应用，遇到Win8 native context和web context 通信的问题，这里将相应的方法分析一下。Win8的介绍和详细信息可以在MSDN上面获得，也可以参考本人介绍开发者预览版时的系列博客 Win8 应用开发介绍（一） Win8新特性\Win8 应用开发介绍（二） Win8应用为王\Win8 应用开发介绍（三） Win8开发者工具\Win8 应用开发介绍（四） Win8应用开发步骤\Win8 应用开发介绍（五） Win8硬件支持和安全性\Win8 应用开发介绍（六） Win8伴你随行\ 1. 问题描述 Win8可是使用HTML, JavaScript方式来开发Metro Style App。那么传统的HTML网页中，加载web端的JavaScript文件采用的代码方式仍然可以使用吗？如： &#60;script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0&#62;&#60;/script&#62; 答案是不可以，因为处于安全考虑，Win8不允许在开发Web Metro应用的时候不允许在Local context中加载一个remote URL。及即使把这个文件下载下来放在本地也是不可以的，因为它会操作HTML页面中的DOM。 在编译的时候会报错。 2.解决方法 将需要加载的页面放在Local Context的iFrame中。这样当Metro应用在运行的时候，iFrame中的页面其实可以理解为运行在Metro IE浏览器中，所以不存在Local Context不允许加载Remote URL的问题。 代码参考如下： &#60;!DOCTYPE html&#62; &#60;html&#62; &#60;head&#62; &#60;meta charset="utf-8" /&#62; &#60;meta name="viewport" content="width=1024, height=768" /&#62; &#60;title&#62;WinWebApp1&#60;/title&#62; &#60;!-- WinJS references [...]]]></description>
			<content:encoded><![CDATA[<p align="left">最近在开发Win8应用，遇到Win8 native context和web context 通信的问题，这里将相应的方法分析一下。Win8的介绍和详细信息可以在MSDN上面获得，也可以参考本人介绍开发者预览版时的系列博客</p>
<p><a href="http://software.intel.com/zh-cn/blogs/2011/12/17/win8-win8/"><b>Win8 </b><b>应用开发介绍（一） Win8</b><b>新特性</b></a><strong>\</strong><b><br /></b><a href="http://software.intel.com/zh-cn/blogs/2011/12/18/win8-win8-2/"><b>Win8 </b><b>应用开发介绍（二） Win8</b><b>应用为王</b></a><strong>\</strong><b><br /></b><a href="http://software.intel.com/zh-cn/blogs/2011/12/18/win8-win8-3/"><b>Win8 </b><b>应用开发介绍（三） Win8</b><b>开发者工具</b></a><strong>\</strong><b><br /></b><a href="http://software.intel.com/zh-cn/blogs/2011/12/18/win8-win8-4/"><b>Win8 </b><b>应用开发介绍（四） Win8</b><b>应用开发步骤</b></a><strong>\</strong><b><br /></b><a href="http://software.intel.com/zh-cn/blogs/2011/12/18/win8-win8-5/"><b>Win8 </b><b>应用开发介绍（五） Win8</b><b>硬件支持和安全性</b></a><strong>\</strong><b><br /></b><a href="http://software.intel.com/zh-cn/blogs/2011/12/18/win8-win8-6/"><b>Win8 </b><b>应用开发介绍（六） Win8</b><b>伴你随行</b></a><strong>\</strong></p>
<p align="left"><b>1. </b><b>问题描述</b><b></b></p>
<p align="left">Win8可是使用HTML, JavaScript方式来开发Metro Style App。那么传统的HTML网页中，加载web端的JavaScript文件采用的代码方式仍然可以使用吗？如：</p>
<p align="left"><em>&lt;script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0&gt;&lt;/script&gt;</em></p>
<p align="left">答案是不可以，因为处于安全考虑，Win8不允许在开发Web Metro应用的时候不允许在Local context中加载一个remote URL。及即使把这个文件下载下来放在本地也是不可以的，因为它会操作HTML页面中的DOM。</p>
<p align="left">在编译的时候会报错。</p>
<p align="left">
<p align="left"> <b>2.解决方法</b><b></b></p>
<p align="left">将需要加载的页面放在Local Context的iFrame中。这样当Metro应用在运行的时候，iFrame中的页面其实可以理解为运行在Metro IE浏览器中，所以不存在Local Context不允许加载Remote URL的问题。</p>
<p align="left">代码参考如下：</p>
<p align="left">
<p align="left">
<pre name="code" class="cpp">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;meta charset="utf-8" /&gt;
    &lt;meta name="viewport" content="width=1024, height=768" /&gt;
    &lt;title&gt;WinWebApp1&lt;/title&gt;
    &lt;!-- WinJS references --&gt;
    &lt;link rel="stylesheet" href="/winjs/css/ui-dark.css" /&gt;
    &lt;script src="/winjs/js/base.js"&gt;&lt;/script&gt;
    &lt;script src="/winjs/js/wwaapp.js"&gt;&lt;/script&gt;
    &lt;script src="/winjs/js/ui.js"&gt;&lt;/script&gt;
    &lt;script src="/winjs/js/controls.js"&gt;&lt;/script&gt;
    &lt;!-- WinWebApp1 references --&gt;
    &lt;link rel="stylesheet" href="/css/default.css" /&gt;
    &lt;script src="/js/default.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;header role="banner" aria-label="Header content"&gt;
        &lt;div class="titleArea"&gt;
            &lt;h1 class="pageTitle win-title" role="button" aria-label="Groups" tabindex="0"&gt;
                Metro Map App&lt;/h1&gt;
        &lt;/div&gt;
    &lt;/header&gt;
    &lt;div&gt;
      &lt;iframe id="mapIframe" src="file:///****.html" width="1280px" height="800px"&gt;&lt;/iframe&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p align="left">
<p align="left"><i>src=file:///****.html </i>或者src=http://****.html 是需要加载web context 的页面，在相应的html文件中可以自由加载remote URL的内容。</p>
<p align="left">在页面中的关系图如下：</p>
<p align="left"> <img height="432" width="585" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/w1.jpg" /></p>
<p align="left">
<p align="left"><b>通信</b><b></b></p>
<p align="left">现在的问题出现了，Web Context如何和Local Context通信了。Win8 IE全面支持了HTML5，在HTML5中可以使用HTML5 postMessage method在不通的页面中进行通信。</p>
<p align="left">假设我们在Local Context中新建一个button，代码如下：</p>
<p align="left">&lt;button onclick="ZoomOut();"&gt;Zoom Out&lt;/button&gt;</p>
<p align="left">在JavaScript中，添加ZoomOut函数：</p>
<p align="left">
<pre name="code" class="cpp">&lt;script&gt;
function ZoomOut(dx, dy) {
    var xMsg = { method: 'zoomout' };
    mapIframe.postMessage( “ ***** Post your message ”);
}
&lt;/script&gt;</pre>
<p align="left">
<p align="left">在Web Context中，添加receiveMessage(event) 参考代码如下：</p>
<p align="left">
<pre name="code" class="cpp">function receiveMessage(event) {
  switch (event.data.method) {

	......

    case 'zoomout':
      var currentZoom = map.getZoom();
      map.setView({ zoom: currentZoom - 1 });
      break;
  }
}
</pre>
</p>
<p>本篇完。 <br /> 参考文章：http://alastaira.wordpress.com/2011/09/26/creating-a-windows-8-metro-slippy-map-application/</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/05/15/metro-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>移动Web应用程序开发 高性能JavaScript篇 (三) JavaScript 加载解析和部署</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/05/10/web-javascript-javascript-3/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/05/10/web-javascript-javascript-3/#comments</comments>
		<pubDate>Thu, 10 May 2012 15:53:27 +0000</pubDate>
		<dc:creator>Dawei Cheng 程大伟 (Intel)</dc:creator>
				<category><![CDATA[全国大学生软件创新大赛专栏]]></category>
		<category><![CDATA[移动技术]]></category>
		<category><![CDATA[英特尔® 软件网络 2.0]]></category>
		<category><![CDATA[软件技术学习及认证]]></category>
		<category><![CDATA[高校博客大奖赛]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[web开发]]></category>
		<category><![CDATA[移动开发]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/05/10/web-javascript-javascript-3/</guid>
		<description><![CDATA[介绍  本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具：HTML5，JavaScript， CSS3。博文也分为三个大部分： 1. 众望所归的HTML5将主要介绍HTML5的前世今生，主要功能和API以及相关Demo，Demo的代码都可以在文章附件中下载到； 2. 高性能JavaScript将主要介绍如何让JavaScript更流畅，JavaScript debug和分析工具，可以说，没有JavaScript就不可能有互联网的今天，更不可能有移动互联网的明天，编写高性能的JavaScript至关重要； 3. 变化万千的CSS3将主要介绍如今异常强大的CSS3，结合HTML5编写动态的Web应用。熟练使用异常Fashion &#38; Cool &#38; 炫的CSS3将使Web应用增色不少。 本篇是高性能JavaScript介绍的第三篇，将给大家结合实例例子及分析工具介绍在加载JavaScript代码时，如何编程可以让Web应用或者网页更加高效。 相关文章  移动Web应用程序开发 高性能JavaScript篇 (一) JavaScript 性能瓶颈 移动Web应用程序开发 高性能JavaScript篇 (二) JavaScript 性能分析工具 加载JavaScript 当Browser在遇到&#60;script&#62;标签的时候，整个页面会因为脚本解析、运行而出现等待，不论实际load的JavaScript代码是内联的还是包含在不相干的外部文件中。页面会因为JavaScript文件的下载，解析而停止，等待脚本完成了才能继续。所以对比以下两段代码看谁能高效： 代码片段一 &#60;html&#62; &#60;head&#62; &#60;title&#62;Script Example&#60;/title&#62; &#60;-- Example of inefficient script positioning --&#62; &#60;script type="text/javascript" src="file1.js"&#62;&#60;/script&#62; &#60;script type="text/javascript" src="file2.js"&#62;&#60;/script&#62; &#60;script type="text/javascript" src="file3.js"&#62;&#60;/script&#62; &#60;link rel="stylesheet" type="text/css" href="styles.css"&#62; &#60;/head&#62; &#60;body&#62; [...]]]></description>
			<content:encoded><![CDATA[<p><strong>介绍</strong><strong> </strong></p>
<p>本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具：HTML5，JavaScript， CSS3。博文也分为三个大部分：</p>
<p>1. 众望所归的HTML5将主要介绍HTML5的前世今生，主要功能和API以及相关Demo，Demo的代码都可以在文章附件中下载到；</p>
<p>2. 高性能JavaScript将主要介绍如何让JavaScript更流畅，JavaScript debug和分析工具，可以说，没有JavaScript就不可能有互联网的今天，更不可能有移动互联网的明天，编写高性能的JavaScript至关重要；</p>
<p>3. 变化万千的CSS3将主要介绍如今异常强大的CSS3，结合HTML5编写动态的Web应用。熟练使用异常Fashion &amp; Cool &amp; 炫的CSS3将使Web应用增色不少。</p>
<p>本篇是高性能JavaScript介绍的第三篇，将给大家结合实例例子及分析工具介绍在加载JavaScript代码时，如何编程可以让Web应用或者网页更加高效。</p>
<p><strong>相关文章</strong><strong> </strong></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/03/26/web-javascript-javascript/">移动Web应用程序开发 高性能JavaScript篇 (一) JavaScript 性能瓶颈</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/04/07/web-javascript-javascript-2/">移动Web应用程序开发 高性能JavaScript篇 (二) JavaScript 性能分析工具</a></p>
<p><strong>加载JavaScript</strong><strong></strong></p>
<p>当Browser在遇到&lt;script&gt;标签的时候，整个页面会因为脚本解析、运行而出现等待，不论实际load的JavaScript代码是内联的还是包含在不相干的外部文件中。页面会因为JavaScript文件的下载，解析而停止，等待脚本完成了才能继续。所以对比以下两段代码看谁能高效：</p>
<p>代码片段一</p>
<pre name="code" class="xhtml">&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;Script Example&lt;/title&gt;
		&lt;-- Example of inefficient script positioning --&gt;
		&lt;script type="text/javascript" src="file1.js"&gt;&lt;/script&gt;
		&lt;script type="text/javascript" src="file2.js"&gt;&lt;/script&gt;
		&lt;script type="text/javascript" src="file3.js"&gt;&lt;/script&gt;
		&lt;link rel="stylesheet" type="text/css" href="styles.css"&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;p&gt;Hello world!&lt;/p&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre>
<p>代码片段二</p>
<pre name="code" class="xhtml">&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;Script Example&lt;/title&gt;
		&lt;link rel="stylesheet" type="text/css" href="styles.css"&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;p&gt;Hello world!&lt;/p&gt;
		&lt;-- Example of recommend script positioning --&gt;
		&lt;script type="text/javascript" src="file1.js"&gt;&lt;/script&gt;
		&lt;script type="text/javascript" src="file2.js"&gt;&lt;/script&gt;
		&lt;script type="text/javascript" src="file3.js"&gt;&lt;/script&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre>
<p>很显然，代码片段二更高效。因为页面显示部分和JavaScript脚本没有直接的关系，所以完全可以先把界面渲染了再去load脚本。三个JS脚本加载时间我们可以从Chrome分析工具中获得，如下图所示：</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/31.jpg" alt="" width="313" height="330" /></p>
<p><strong></strong></p>
<p><strong>将脚本成组加载</strong></p>
<p>由于每个&lt;script&gt;标签在下载时都会阻塞页面解析的过程，所以限制页面&lt;script&gt;总数也可以改善性能。所以成组加载JavaScript脚本可以提升页面整体性能，这个规则不仅对内联脚本有效，对外部脚本同样适用。</p>
<p>原因是在于每个HTTP 请求都会产生额外的性能负担，下载一个100KB的脚本远比下载4个25KB的脚本要快。</p>
<p>下面我们用两个demo来证明一下：demo源代码可在本文结尾处下载。</p>
<p>代码片段一：</p>
<pre name="code" class="xhtml">&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;Script Example&lt;/title&gt;
		&lt;link rel="stylesheet" type="text/css" href="styles.css"&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;p&gt;Hello world!&lt;/p&gt;
		&lt;-- Example of not recommended script positioning --&gt;
		&lt;script type="text/javascript" src="
		http://yui.yahooapis.com/combo?2.7.0/build/yahoo/yahoo-min.js"&gt;
		&lt;/script&gt;
		&lt;script type="text/javascript" src="
		http://yui.yahooapis.com/combo?2.7.0/build/event/event-min.js "&gt;
		&lt;/script&gt;
	&lt;/body&gt;</pre>
<p>代码片段二：</p>
<pre name="code" class="xhtml">&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;Script Example&lt;/title&gt;
		&lt;link rel="stylesheet" type="text/css" href="styles.css"&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;p&gt;Hello world!&lt;/p&gt;
		&lt;-- Example of recommended script positioning --&gt;
		&lt;script type="text/javascript" src="

http://yui.yahooapis.com/combo?2.7.0/build/yahoo/yahoo-min.js&#038;

		2.7.0/build/event/event-min.js "&gt;&lt;/script&gt;
	&lt;/body&gt;</pre>
<p>两段代码运行后，分别用Chrome开发者工具里面的TimeLine进行分析结果如下图：代码片段二要更加高效。</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/32.jpg" alt="" width="584" height="197" /></p>
<p><strong>动态加载脚本</strong><strong></strong></p>
<p>文件对象模型（DOM）允许用户使用JavaScript创建HTML文档中几乎全部的元素和内容。&lt;script&gt;元素也不例外。所以，使用DOM可以动态的在JavaScript动创建，移动，删除脚本文件，这样可以比较JavaScript在加载时对UI页面的阻塞。</p>
<p>参见代码片段：</p>
<pre name="code" class="xhtml">&lt;script &gt;
	var script = document.createElement("script")
	script.type = "text/javascript";
	//Firefox, Opera, Chrome, Safari 3+
	script.onload = function(){
		alert("Script loaded!");
	};
	script.src = "file1.js";
	document.getElementsByTagName("head")[0].appendChild(script);
&lt;/script&gt;</pre>
<p>运行后使用TimeLine分析如下图所示：可以看出JavaScript的加载并没有阻塞UI页面。</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/33.jpg" alt="" /></p>
<p><strong>XHR</strong><strong>脚本</strong><strong></strong></p>
<p>另外一种非阻塞方式加载脚本的方法就是将XMLHttpRequest（XHR）对象加入到页面中。这种方式首先需要创建一个XHR对象，然后下载JavaScript文件，再使用一个动态的&lt;script&gt;元素将JavaScript代码加入到页面里面。</p>
<p>具体参加代码示例：</p>
<pre name="code" class="xhtml">var xhr = new XMLHttpRequest();
xhr.open("get", "file1.js", true);
xhr.onreadystatechange = function(){
    if (xhr.readyState == 4){
        if (xhr.status &gt;= 200 &amp;&amp; xhr.status &lt; 300 || xhr.status == 304){
	var script = document.createElement("script");
	script.type = "text/javascript";
	script.text = xhr.responseText;
	document.body.appendChild(script);
        }
    }
};
xhr.send(null);</pre>
<p><strong>部署</strong><strong>JavaScript</strong></p>
<p>为了让客户端Web应用更加高效和便捷，不仅仅在客户端编程时可以高效地使用JavaScript，同样在Server端可以通过以下途径来使Web页面的加载更高快速。</p>
<p>1. 尽可能地合并JavaScript文件，降低HTTP请求数量</p>
<p>2. 压缩JavaScript文件，缩小下载文件的大小，可以使用gzip的方式进行压缩。</p>
<p>3. 通过设定合适的HTTP 回复头文件来使客户端缓存一些大的JavaScript文件。一旦脚本被缓存，则用户下次打开时，可以显著降低加下载和解析时间。</p>
<p>4. 对于服务范围很广的公司，可以考虑使用CDN（Content Delivery Network）来部署JavaScript文件。</p>
<p>源代码下载地址：<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/LoadDeploy.zip"> 下载</a></p>
<p>参考文章：High performance JavaScript O'Reilly Yahoo Press</p>
<p>在下一篇文章中将给大家介绍在JavaScript编程的过程中，如何通过一些编程技巧来提升Web应用的性能，缩短其处理时间。</p>
<p><strong>相关文章</strong><strong></strong></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/03/26/web-javascript-javascript/">移动Web应用程序开发 高性能JavaScript篇 (一) JavaScript 性能瓶颈</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/04/07/web-javascript-javascript-2/">移动Web应用程序开发 高性能JavaScript篇 (二) JavaScript 性能分析工具</a></p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/05/10/web-javascript-javascript-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在学习HTML5时，别忘了CSS技术</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/05/09/html5css/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/05/09/html5css/#comments</comments>
		<pubDate>Wed, 09 May 2012 06:53:25 +0000</pubDate>
		<dc:creator>782823622</dc:creator>
				<category><![CDATA[全国大学生软件创新大赛专栏]]></category>
		<category><![CDATA[软件技术学习及认证]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/05/09/html5css/</guid>
		<description><![CDATA[笔者就html5学习展开思考，光学大赛官网上的关于html5的知识是不够的，参赛作品不仅仅光需要html5更需要各个方面的组合，所以团队各个成员学习的侧重点最好不同，CSS对软件的重要性这里就不过多赘述了。学习有关CSS的课程我们现在最好尽快开始。 善于运用CSS知识 你最好很擅长CSS技术，因为让游戏在桌面电脑平台、Android手机及所有iOS设备的主流浏览器流畅运行，需要用到大量的CSS知识。我们有一个网页开发者的任务就是处理与CSS相关的工作，针对多种移动设备创建可动态变换尺寸的菜单。在电子游戏设计中，有50％的工作用于创建菜单。而HTML5跨平台游戏开发中有50％属于与CSS相关的工作。 *我们的实践证明，开发者可以使用HTML5制作出很棒的跨平台等视距游戏。 *如果玩家可以在一个设备上玩某款游戏，多数人就会想在手机或平板电脑上继续体验该游戏。 *制作HTML5跨平台游戏需进行大量试验。 *虽然HTML5很强大，但仍有一些不甚完善之处。 *跨平台游戏体验意味着，游戏设计之初就要考虑到用户在不同设备上的体验。 *不可在手机游戏中植入需进行大量堆叠或过度拖动的操作。 *最好很精通CSS技能。 以下是我们在Facebook平台开发跨平台HTML5游戏的一些极有帮助的参考资料： 1）viewporter. https://github.com/zynga/viewporter. 这个Zynga开源代码允许你获取任何设备的屏幕尺寸，并针对这些屏幕调整游戏大小。它比你自己从头编写代码更省时间（我们用过Viewporter，也自己写过代码，所以才会知道这一点。） 2）Weinre.http://phonegap.github.com/weinre/. 这个远程调试器工作原理类似于Web Inspector，但它运行于移动设备。它有助于追踪iPhone和iPad等设备上的控制台错误信息。 3）JQuery. http://jquery.com/ 你可以利用这个库中现成的代码，省下自己写代码的时间。它对文本动画处理极有用处，我们进行了一些修改并推出了JQuery Mobile，它更适用于移动设备平台。 4）node.JS. http://nodejs.org/ 在你使用Javascript编写内容时，它可以让你省时省力地使客户端代码及服务器相适配。在作为游戏服务器时，node.JS的扩展性能也十分理想。 笔者就html5学习展开思考，光学大赛官网上的关于html5的知识是不够的，参赛作品不仅仅光需要html5更需要各个方面的组合，所以团队各个成员学习的侧重点最好不同，CSS对软件的重要性这里就不过多赘述了。学习有关CSS的课程我们现在最好尽快开始。]]></description>
			<content:encoded><![CDATA[<p>笔者就html5学习展开思考，光学大赛官网上的关于html5的知识是不够的，参赛作品不仅仅光需要html5更需要各个方面的组合，所以团队各个成员学习的侧重点最好不同，CSS对软件的重要性这里就不过多赘述了。学习有关CSS的课程我们现在最好尽快开始。<br />
善于运用CSS知识</p>
<p>你最好很擅长CSS技术，因为让游戏在桌面电脑平台、Android手机及所有iOS设备的主流浏览器流畅运行，需要用到大量的CSS知识。我们有一个网页开发者的任务就是处理与CSS相关的工作，针对多种移动设备创建可动态变换尺寸的菜单。在电子游戏设计中，有50％的工作用于创建菜单。而HTML5跨平台游戏开发中有50％属于与CSS相关的工作。</p>
<p>*我们的实践证明，开发者可以使用HTML5制作出很棒的跨平台等视距游戏。</p>
<p>*如果玩家可以在一个设备上玩某款游戏，多数人就会想在手机或平板电脑上继续体验该游戏。</p>
<p>*制作HTML5跨平台游戏需进行大量试验。</p>
<p>*虽然HTML5很强大，但仍有一些不甚完善之处。</p>
<p>*跨平台游戏体验意味着，游戏设计之初就要考虑到用户在不同设备上的体验。</p>
<p>*不可在手机游戏中植入需进行大量堆叠或过度拖动的操作。</p>
<p>*最好很精通CSS技能。</p>
<p>以下是我们在Facebook平台开发跨平台HTML5游戏的一些极有帮助的参考资料：</p>
<p>1）viewporter. https://github.com/zynga/viewporter. 这个Zynga开源代码允许你获取任何设备的屏幕尺寸，并针对这些屏幕调整游戏大小。它比你自己从头编写代码更省时间（我们用过Viewporter，也自己写过代码，所以才会知道这一点。）</p>
<p>2）Weinre.http://phonegap.github.com/weinre/. 这个远程调试器工作原理类似于Web Inspector，但它运行于移动设备。它有助于追踪iPhone和iPad等设备上的控制台错误信息。</p>
<p>3）JQuery. http://jquery.com/ 你可以利用这个库中现成的代码，省下自己写代码的时间。它对文本动画处理极有用处，我们进行了一些修改并推出了JQuery Mobile，它更适用于移动设备平台。</p>
<p>4）node.JS. http://nodejs.org/ 在你使用Javascript编写内容时，它可以让你省时省力地使客户端代码及服务器相适配。在作为游戏服务器时，node.JS的扩展性能也十分理想。</p>
<p>笔者就html5学习展开思考，光学大赛官网上的关于html5的知识是不够的，参赛作品不仅仅光需要html5更需要各个方面的组合，所以团队各个成员学习的侧重点最好不同，CSS对软件的重要性这里就不过多赘述了。学习有关CSS的课程我们现在最好尽快开始。</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/05/09/html5css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>移动Web应用程序开发 高性能JavaScript篇(二) JavaScript 开发分析工具</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/04/07/web-javascript-javascript-2/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/04/07/web-javascript-javascript-2/#comments</comments>
		<pubDate>Sat, 07 Apr 2012 12:51:28 +0000</pubDate>
		<dc:creator>Dawei Cheng 程大伟 (Intel)</dc:creator>
				<category><![CDATA[全国大学生软件创新大赛专栏]]></category>
		<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[移动技术]]></category>
		<category><![CDATA[英特尔® 软件网络 2.0]]></category>
		<category><![CDATA[软件技术学习及认证]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[web开发]]></category>
		<category><![CDATA[移动开发]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/04/07/web-javascript-javascript-2/</guid>
		<description><![CDATA[1. JavaScript 引擎介绍 这里只介绍主流浏览器的JavaScript引擎。如下图所示： JS引擎一般作为共享库使用，应用程序调用引擎提供的API函数。引擎API函数大致分为以下几种：数据类型操作、RunTime控制、类与对象的创建和维护、函数与脚本执行、字符串操作、错误处理、安全控制、Debug支持。 上图中测试使用的是Google V8 benchmark。可以看出Chrome V8引擎JavaScript执行各项指标最优。 其中：每款浏览器JavaScript引擎发展历史： Mozilla • SpiderMonkey，第一款JavaScript引擎，由Brendan Eich在Netscape Communications时编写，用于Mozilla Firefox 1.0～3.0版本。 • Rhino，由Mozilla基金会管理，开放源代码，完全以Java编写。 • TraceMonkey，基于即时编译的引擎，其中部份程式码取自Tamarin引擎，用于Mozilla Firefox 3.5～3.6版本。 • JaegerMonkey，德文Jäger原意为猎人，结合追踪和组合码技术大幅提高效能，部分技术借凿了V8、JavaScriptCore、WebKit，用于Mozilla Firefox 4.0以上版本。 Google • V8，开放源代码，由Google丹麦开发，是Google Chrome的一部分。 微软 • Chakra (JScript引擎)，中文译名为查克拉，用于Internet Explorer 9的32位版本。 Opera • Linear A，用于Opera 4.0～6.1版本。 • Linear B，用于Opera 7.0～9.2版本。 • Futhark，用于Opera 9.5～10.2版本。 • Carakan，由Opera软件公司编写，自Opera10.50版本开始使用。 其它 • KJS，KDE的ECMAScript/JavaScript引擎，最初由Harri Porten开发，用于KDE项目的Konqueror网页浏览器中。 [...]]]></description>
			<content:encoded><![CDATA[<p><strong>1. JavaScript </strong><strong>引擎介绍</strong><strong></strong></p>
<p>这里只介绍主流浏览器的JavaScript引擎。如下图所示：</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/04/21.jpg" alt="" width="565" height="352" /></p>
<p>JS引擎一般作为共享库使用，应用程序调用引擎提供的API函数。引擎API函数大致分为以下几种：数据类型操作、RunTime控制、类与对象的创建和维护、函数与脚本执行、字符串操作、错误处理、安全控制、Debug支持。</p>
<p>上图中测试使用的是Google V8 benchmark。可以看出Chrome V8引擎JavaScript执行各项指标最优。</p>
<p>其中：每款浏览器JavaScript引擎发展历史：</p>
<p><strong>Mozilla</strong><strong></strong></p>
<p>• SpiderMonkey，第一款JavaScript引擎，由Brendan Eich在Netscape Communications时编写，用于Mozilla Firefox 1.0～3.0版本。</p>
<p>• Rhino，由Mozilla基金会管理，开放源代码，完全以Java编写。</p>
<p>• TraceMonkey，基于即时编译的引擎，其中部份程式码取自Tamarin引擎，用于Mozilla Firefox 3.5～3.6版本。</p>
<p>• JaegerMonkey，德文Jäger原意为猎人，结合追踪和组合码技术大幅提高效能，部分技术借凿了V8、JavaScriptCore、WebKit，用于Mozilla Firefox 4.0以上版本。</p>
<p><strong>Google</strong></p>
<p>• V8，开放源代码，由Google丹麦开发，是Google Chrome的一部分。</p>
<p><strong>微软</strong><strong></strong></p>
<p>• Chakra (JScript引擎)，中文译名为查克拉，用于Internet Explorer 9的32位版本。</p>
<p><strong>Opera</strong></p>
<p>• Linear A，用于Opera 4.0～6.1版本。</p>
<p>• Linear B，用于Opera 7.0～9.2版本。</p>
<p>• Futhark，用于Opera 9.5～10.2版本。</p>
<p>• Carakan，由Opera软件公司编写，自Opera10.50版本开始使用。</p>
<p><strong>其它</strong><strong></strong></p>
<p>• KJS，KDE的ECMAScript/JavaScript引擎，最初由<a title="Harri Porten" href="http://zh.wikipedia.org/w/index.php?title=Harri_Porten&amp;action=edit&amp;redlink=1">Harri Porten</a>开发，用于KDE项目的Konqueror网页浏览器中。</p>
<p>• Narcissus，开放源代码，由Brendan Eich编写（他也参与编写了第一个SpiderMonkey）。</p>
<p>• Tamarin，由Adobe Labs编写，Flash Player 9所使用的引擎。</p>
<p>• Nitro（原名SquirrelFish），为Safari 4编写。</p>
<p><strong>2. JavaScript </strong><strong>开发工具</strong><strong></strong></p>
<p>下面介绍几款常用的JavaScript 开发调试工具：</p>
<p>1. Google Chrome Developer Tools</p>
<p>个人觉得目前Chrome开发者工具是所有工具中最好用的JavaScript开发调试工具，其具有非常强大的功能。具体参考：<a href="https://developers.google.com/chrome-developer-tools/docs/overview">https://developers.google.com/chrome-developer-tools/docs/overview</a></p>
<p>2. Mozilla Firefox Firebug</p>
<p>Mozilla 在Web开发领域一直是一个领导者，Firebug也是非常方便的开发调试工具。可以分析，查看log, Debug等功能很强大。具体参考：<a href="http://getfirebug.com/">http://getfirebug.com/</a></p>
<p>3. IE Developer Tools</p>
<p>微软IE也提供了自己的一套开发工具，但是个人觉得用起来不是很方便，可能是不习惯的原因吧。具体信息参考<a href="http://www.microsoft.com/download/en/confirmation.aspx?id=18359">http://www.microsoft.com/download/en/confirmation.aspx?id=18359</a></p>
<p>再介绍两款JavaScript网页性能分析工具：</p>
<p>1. JavaScript Performance 网站 http://jsperf.com/</p>
<p>用户可以在该网站上面写不同的test case来测试如何写JavaScript代码更加高效。如果需要针对IE做优化，只需要在IE中打开该网站进行测试和分析，如果需要在Chrome中做优化，一样，对应地在Chrome中打开就可以了。点击测试之后，会给出一份很详细的测试报告。</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/04/22.jpg" alt="" width="554" height="432" /></p>
<p>2. Chrome speedtracer 插件。</p>
<p>具体的使用方式参考：<a href="https://developers.google.com/web-toolkit/speedtracer/get-started">https://developers.google.com/web-toolkit/speedtracer/get-started</a></p>
<p>然后打开你要性能分析的网页，打开这个工具，然后刷新目标网站，刷新完了点击停止分析，就可以查看报告了。</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/04/23.jpg" alt="" width="669" height="394" /></p>
<p>打开每一项之后可以看到很详细的分析报告，如下图：</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/04/24.jpg" alt="" width="716" height="302" /></p>
<p><strong>相关文章</strong><strong></strong></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/03/26/web-javascript-javascript/">移动Web应用程序开发 高性能JavaScript篇 (一) JavaScript 性能瓶颈</a></p>
<p>参考文章： WiKi Javascript Engine</p>
<p>在写一篇文章中将给大家结合实例例子及分析工具介绍在加载JavaScript代码时，如何编程可以让Web应用或者网页更加高效。</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/04/07/web-javascript-javascript-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>移动Web应用程序开发 高性能JavaScript篇 (一) JavaScript性能瓶颈</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/03/26/web-javascript-javascript/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/03/26/web-javascript-javascript/#comments</comments>
		<pubDate>Mon, 26 Mar 2012 13:43:51 +0000</pubDate>
		<dc:creator>Dawei Cheng 程大伟 (Intel)</dc:creator>
				<category><![CDATA[全国大学生软件创新大赛专栏]]></category>
		<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[移动技术]]></category>
		<category><![CDATA[英特尔® 软件网络 2.0]]></category>
		<category><![CDATA[软件技术学习及认证]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[web开发]]></category>
		<category><![CDATA[移动开发]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/03/26/web-javascript-javascript/</guid>
		<description><![CDATA[介绍 本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具：HTML5，JavaScript， CSS3。博文也分为三个大部分： 1. 众望所归的HTML5将主要介绍HTML5的前世今生，主要功能和API以及相关Demo，Demo的代码都可以在文章附件中下载到； 2. 高性能JavaScript将主要介绍如何让JavaScript更流畅，JavaScript debug和分析工具，可以说，没有JavaScript就不可能有互联网的今天，更不可能有移动互联网的明天，编写高性能的JavaScript至关重要； 3. 变化万千的CSS3将主要介绍如今异常强大的CSS3，结合HTML5编写动态的Web应用。熟练使用异常Fashion &#38; Cool &#38; 炫的CSS3将使Web应用增色不少。 本篇是高性能JavaScript介绍的第一篇，主要介绍JavaScript语言特性，为什么要编写高性能的JavaScript代码，以及对编写高性能JavaScript代码的开篇小结。 HTML5 系列文章 移动Web应用程序开发 HTML5篇 (一) HTML5简介 移动Web应用程序开发 HTML5篇 (二) 新功能介绍和测试 移动Web应用程序开发 HTML5篇 (三) Canvas API 移动Web应用程序开发 HTML5篇 (四) 多媒体 API 移动Web应用程序开发 HTML5篇 (五) 地址位置 API 移动Web应用程序开发 HTML5篇 (六) 通信(Communication) API 移动Web应用程序开发 HTML5篇 (七) Web Sockets API 移动Web应用程序开发 HTML5篇 (八) Offline [...]]]></description>
			<content:encoded><![CDATA[<p><strong>介绍</strong><strong></strong></p>
<p>本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具：HTML5，JavaScript， CSS3。博文也分为三个大部分：</p>
<p>1. 众望所归的HTML5将主要介绍HTML5的前世今生，主要功能和API以及相关Demo，Demo的代码都可以在文章附件中下载到；</p>
<p>2. 高性能JavaScript将主要介绍如何让JavaScript更流畅，JavaScript debug和分析工具，可以说，没有JavaScript就不可能有互联网的今天，更不可能有移动互联网的明天，编写高性能的JavaScript至关重要；</p>
<p>3. 变化万千的CSS3将主要介绍如今异常强大的CSS3，结合HTML5编写动态的Web应用。熟练使用异常Fashion &amp; Cool &amp; 炫的CSS3将使Web应用增色不少。</p>
<p>本篇是高性能JavaScript介绍的第一篇，主要介绍JavaScript语言特性，为什么要编写高性能的JavaScript代码，以及对编写高性能JavaScript代码的开篇小结。</p>
<p><strong>HTML5 </strong><strong>系列文章</strong><strong></strong></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/02/20/web-html5-html5/">移动Web应用程序开发 HTML5篇 (一) HTML5简介</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/02/22/web-html5/">移动Web应用程序开发 HTML5篇 (二) 新功能介绍和测试</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/02/22/webhtml5-canvas-api/">移动Web应用程序开发 HTML5篇 (三) Canvas API</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/02/27/web-html5-api/">移动Web应用程序开发 HTML5篇 (四) 多媒体 API</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/03/01/webhtml5-api/">移动Web应用程序开发 HTML5篇 (五) 地址位置 API</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/03/02/webhtml5-communication-api/">移动Web应用程序开发 HTML5篇 (六) 通信(Communication) API</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/03/05/webhtml5-web-sockets-api/">移动Web应用程序开发 HTML5篇 (七) Web Sockets API</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/03/09/webhtml5-offline-web-applications/">移动Web应用程序开发 HTML5篇 (八) Offline Web Applications</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/03/21/webhtml5-web-storage-api/">移动Web应用程序开发HTML5篇 (九) Web Storage API</a></p>
<p><strong>1. JavaScript </strong><strong>介绍</strong><strong></strong></p>
<p>JavaScript用于Web编程的功能实现，被数百万计的网页用来改进设计、验证表单、检测浏览器、创建cookies，以及更多的应用。按照WiKipedia的说法，它是：</p>
<p>Prototype-based scripting language;</p>
<p>Dynamic, weakly typed and has first-class functions language;</p>
<p>Implementation of the ECMAScript language standard. ECMA-262-3。</p>
<p>我们依次来解释其中每句话的意思。</p>
<p>1. JavaScript是基于原型的脚本语言：基于原型的语言和传统基于类型的语言如Java等相对的。基于原型的语言所有的对象都是实例，通过原型来继承属性，构造函数或者原型指定了一组初始的属性.可以对一个对象或者一组对象动态的增加和删除属性。</p>
<p>2. 动态的，弱类型以及拥有First class function 的语言。</p>
<p>动态是指JavaScript是运行时动态解释的语言，系统不会将其编译为二进制文件进行执行。</p>
<p>弱类型是和强类型相对的，弱类型语言允许将一块内存看做多种类型。比如直接将整型变量与字符变量相加。强类型语言在没有强制类型转化前，不允许两种不同类型的变量相互操作。Java、C# 和 Python 等都是强类型语言。</p>
<p>First Class Function是指"能够用于类型生命"，即变量的类型可以是函数，可以赋值和传递函数。</p>
<p>3. 多范式的，支持基于对象的，指令模式和函数编程。</p>
<p>4. JavaScript是ECMAScrip标准的一个实现，目前使用的是ECMA-262-3. ECMAScript是一种由Ecma国际（前身为欧洲计算机制造商协会）通过ECMA-262标准化的脚本程序设计语言。</p>
<p><strong>2. </strong><strong>为什么</strong><strong>JavaScript</strong><strong>性能很重要</strong><strong></strong></p>
<p>通过上面的介绍，我们了解了JavaScript的属性和大致情况，那么为什么程序员在开发JavaScript代码时需要特别注重JavaScript性能呢？原因主要有以下几点：</p>
<p>1. 在过去的十年中，互联网改变了一切，最近的2年中，移动互联网深刻地改善了人们的生活，各种新技术层出不穷，HTML5，CSS3等等。网络负载越来越大，网页内容越来越丰富，加载的内容也越来越多，所有的一切都变了，只有JavaScript没有变。其作为一种脚本语言，伴随着互联网的发展十余年，都没有改变过。所以在以前没有的性能问题，如今都显现出来，如长时间Block UI Thread等问题。这就迫切需要我们深入了解其机制，编写高性能的JavaScript代码。</p>
<p>2. JavaScript是一个动态解释的语言，其固有特性导致运行的速度比编译成二进制代码的语言要慢很多，要想加快运行速度迫使开发者开发高性能的JavaScript代码。</p>
<p>3. 由于JavaScript是动态运行的，并没有编译环节，所以也迫使开发者编程时要完成很多本来可以由编译器完成的优化选项。比如gcc -o3的这些优化原理需要开发者在开发JavaScript代码时，自己手动去编写。</p>
<p><strong>3. </strong><strong>总结</strong><strong></strong></p>
<p>综上所述，JavaScript作为一个广受欢迎的web开发脚本语言，因为其已使用的特点，被广大Web开发者用来开发各种应用程序，但是由于网络环境，负载情况和运行环境在近几年都发生了很大的变化使开发者必须为Web应用优化JavaScript代码才能使其得到高效的运行，同时JavaScript固有特性使开发者需要去做可以由编译器完成的优化工作，也迫使开发者编写高性能的JavaScript代码。</p>
<p>本篇完，在第二篇中将给大家介绍目前流行的JavaScript引擎以及如何使用JavaScript性能分析工具来Tuning你的JavaScript代码。</p>
<p>参考文献： High performance JavaScript O'Reilly Yahoo Press</p>
<p>相关文章阅读：</p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/02/12/javascript/">JavaScript被扩展以支持并行运算</a></p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/03/26/web-javascript-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>移动Web应用程序开发HTML5篇 (九) Web Storage API</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/03/21/webhtml5-web-storage-api/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/03/21/webhtml5-web-storage-api/#comments</comments>
		<pubDate>Wed, 21 Mar 2012 02:59:07 +0000</pubDate>
		<dc:creator>Dawei Cheng 程大伟 (Intel)</dc:creator>
				<category><![CDATA[全国大学生软件创新大赛专栏]]></category>
		<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[移动技术]]></category>
		<category><![CDATA[英特尔® 软件网络 2.0]]></category>
		<category><![CDATA[软件技术学习及认证]]></category>
		<category><![CDATA[Web Storage]]></category>
		<category><![CDATA[web开发]]></category>
		<category><![CDATA[移动开发]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/03/21/webhtml5-web-storage-api/</guid>
		<description><![CDATA[介绍  本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具：HTML5，JavaScript， CSS3。 本篇是HTML5介绍的第九篇，主要介绍HTML5的网络存储接口（Web Storage API）。 相关文章： 移动Web应用程序开发 HTML5篇 (一) HTML5简介 移动Web应用程序开发 HTML5篇 (二) 新功能介绍和测试 移动Web应用程序开发 HTML5篇 (三) Canvas API 移动Web应用程序开发 HTML5篇 (四) 多媒体 API 移动Web应用程序开发 HTML5篇 (五) 地址位置 API 移动Web应用程序开发 HTML5篇 (六) 通信(Communication) API 移动Web应用程序开发 HTML5篇 (七) Web Sockets API 移动Web应用程序开发 HTML5篇 (八) Offline Web Appliactions 1. 介绍 HTML5对数据存储进行了从新设计，在传统的网页中，数据可以存储在Cookies中或者数据库中。Cookies容量太小，数据库又太大。所以HTML5 Web Storage API 应运而生。目前浏览器对齐支持状况如下图： 2. [...]]]></description>
			<content:encoded><![CDATA[<p><strong>介绍</strong><strong> </strong></p>
<p>本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具：HTML5，JavaScript， CSS3。</p>
<p>本篇是HTML5介绍的第九篇，主要介绍HTML5的网络存储接口（Web Storage API）。</p>
<div>相关文章：</div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/20/web-html5-html5/">移动Web应用程序开发 HTML5篇 (一) HTML5简介</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/22/web-html5/">移动Web应用程序开发 HTML5篇 (二) 新功能介绍和测试</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/22/webhtml5-canvas-api/">移动Web应用程序开发 HTML5篇 (三) Canvas API</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/27/web-html5-api/">移动Web应用程序开发 HTML5篇 (四) 多媒体 API</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/03/01/webhtml5-api/">移动Web应用程序开发 HTML5篇 (五) 地址位置 API</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/03/02/webhtml5-communication-api/">移动Web应用程序开发 HTML5篇 (六) 通信(Communication) API</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/03/05/webhtml5-web-sockets-api/">移动Web应用程序开发 HTML5篇 (七) Web Sockets API</a></div>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/03/09/webhtml5-offline-web-applications/">移动Web应用程序开发 HTML5篇 (八) Offline Web Appliactions<br />
</a><strong><br />
1. 介绍</strong><strong></strong></p>
<p>HTML5对数据存储进行了从新设计，在传统的网页中，数据可以存储在Cookies中或者数据库中。Cookies容量太小，数据库又太大。所以HTML5 Web Storage API 应运而生。目前浏览器对齐支持状况如下图：</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/91.jpg" alt="" /></p>
<p><strong>2. 使用方法</strong><strong></strong></p>
<p>Web Storage API有两种方式，Local Storage 和Session Storage.</p>
<p>Local Storage 存储的数据是永久的，不会因为应用或者浏览器关闭而丢失，而且可以为同一个域下的不同网页所共享，采用明文存储的方式。</p>
<p>Session Storage 存储的数据只在本页面运行的时候有效，而且不能被其他网页所共享。</p>
<p>具体关系见下表</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/92.jpg" alt="" /></p>
<p>Web Storage API使用键值方式存储数据，其容量大小根据不同浏览器稍有不同，但是要远远大于Cookies。一般大于5MB。Web Storage API同样可以用来存储Jason数据。</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/93.jpg" alt="" width="364" height="111" /></p>
<p>Web Storage API的方法很简单，创建和读取一个Local Storage数据代码如下：</p>
<pre name="code" class="cpp">localStorage.setItem(‘name’,’Smith’);var name = localStorage.getItem(‘name’);</pre>
<p>创建和读取一个Session Storage数据代码如下：</p>
<pre name="code" class="cpp">sessionStorage.setItem(‘name’,’Smith’)var name = session.getItem(‘name’);</pre>
<p>创建之后，我们可以通过Chrome的Developer Tools来查看数据。在Chrome浏览器中按快捷键F12可以调出Developer Tools。</p>
<p>从下图中我们看出相应的Local Storage 和Session Storage。</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/94.jpg" alt="" /></p>
<p><strong>2. Web Storage </strong><strong>例子</strong><strong></strong></p>
<p>下面我们通过两个例子来更加详细地了解Web Storage API使用方法.</p>
<p>第一个例子用来展示如何使用Local Storage， 代码如下：</p>
<pre name="code" class="cpp">&lt;!DOCTYPE HTML&gt;
&lt;html&gt;
&lt;body&gt;

&lt;script type="text/javascript"&gt;

if (localStorage.pagecount)
	{
	localStorage.pagecount=Number(localStorage.pagecount) +1;
	}
else
	{
	localStorage.pagecount=1;
	}
document.write("Visits: " + localStorage.pagecount + " time(s).");

&lt;/script&gt; 

&lt;p&gt;Refresh the page to see the counter increase.&lt;/p&gt;

&lt;p&gt;Close the browser window, and try again, and the counter will continue.&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>运行后会显示：</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/95.jpg" alt="" width="488" height="80" /></p>
<p>当关掉网页甚至关掉浏览器之后，再次运行该网页，会发现数据已经存储，而且在上次关掉的基础上进行累加。如下图：</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/96.jpg" alt="" width="455" height="84" /></p>
<p>第二个例子展示如何使用Session Storage，代码如下：</p>
<pre name="code" class="cpp">&lt;!DOCTYPE HTML&gt;
&lt;html&gt;
&lt;body&gt;

&lt;script type="text/javascript"&gt;
if (sessionStorage.pagecount)
  {
  sessionStorage.pagecount=Number(sessionStorage.pagecount) +1;
  }
else
  {
  sessionStorage.pagecount=1;
  }
document.write("Visits "+sessionStorage.pagecount+" time(s) this session.");
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</pre>
<p>运行后：</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/97.jpg" alt="" /></p>
<p>刷新网页数据会累加，但是关掉网页再打开，会发现数据从新开始，并没有记住上次的数据。</p>
<p>代码下载：<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/Storage.zip"> 地址</a></p>
<p><strong>3. </strong><strong>总结</strong><strong></strong></p>
<p>Web应用程序开发的HTML5篇介绍到此结束了。HTML5还有很多新的特性在这9篇文章中没有介绍到，如：Web Workers API, WebGL, Device API, Gestures, P2P Networking等，我会在接下来的High performance JavaScript系列和CSS3系列中进行补充。</p>
<p>本系列的全部文章：<br />
相关文章：<br />
<a href="http://software.intel.com/zh-cn/blogs/2012/02/20/web-html5-html5/">移动Web应用程序开发 HTML5篇 (一) HTML5简介</a><br />
<a href="http://software.intel.com/zh-cn/blogs/2012/02/22/web-html5/">移动Web应用程序开发 HTML5篇 (二) 新功能介绍和测试</a><br />
<a href="http://software.intel.com/zh-cn/blogs/2012/02/22/webhtml5-canvas-api/">移动Web应用程序开发 HTML5篇 (三) Canvas API</a><br />
<a href="http://software.intel.com/zh-cn/blogs/2012/02/27/web-html5-api/">移动Web应用程序开发 HTML5篇 (四) 多媒体 API</a><br />
<a href="http://software.intel.com/zh-cn/blogs/2012/03/01/webhtml5-api/">移动Web应用程序开发 HTML5篇 (五) 地址位置 API</a><br />
<a href="http://software.intel.com/zh-cn/blogs/2012/03/02/webhtml5-communication-api/">移动Web应用程序开发 HTML5篇 (六) 通信(Communication) API</a><br />
<a href="http://software.intel.com/zh-cn/blogs/2012/03/05/webhtml5-web-sockets-api/">移动Web应用程序开发 HTML5篇 (七) Web Sockets API</a><br />
<a href="http://software.intel.com/zh-cn/blogs/2012/03/09/webhtml5-offline-web-applications/">移动Web应用程序开发 HTML5篇 (八) Offline Web Appliactions<br />
</a><strong><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/03/21/webhtml5-web-storage-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>移动Web应用程序开发HTML5篇 (八) Offline Web Applications</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/03/09/webhtml5-offline-web-applications/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/03/09/webhtml5-offline-web-applications/#comments</comments>
		<pubDate>Fri, 09 Mar 2012 13:16:50 +0000</pubDate>
		<dc:creator>Dawei Cheng 程大伟 (Intel)</dc:creator>
				<category><![CDATA[全国大学生软件创新大赛专栏]]></category>
		<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[移动技术]]></category>
		<category><![CDATA[英特尔® 软件网络 2.0]]></category>
		<category><![CDATA[软件技术学习及认证]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[offline web apps]]></category>
		<category><![CDATA[web开发]]></category>
		<category><![CDATA[离线应用]]></category>
		<category><![CDATA[移动开发]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/03/09/webhtml5-offline-web-applications/</guid>
		<description><![CDATA[介绍 本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具：HTML5，JavaScript， CSS3。 本篇是HTML5介绍的第八篇，主要介绍HTML5的离线应用Offline Web Applications）。 相关文章： 移动Web应用程序开发 HTML5篇 (一) HTML5简介 移动Web应用程序开发 HTML5篇 (二) 新功能介绍和测试 移动Web应用程序开发 HTML5篇 (三) Canvas API 移动Web应用程序开发 HTML5篇 (四) 多媒体 API 移动Web应用程序开发 HTML5篇 (五) 地址位置 API 移动Web应用程序开发 HTML5篇 (六) 通信(Communication) API 移动Web应用程序开发 HTML5篇 (七) Web Sockets API 1. 离线应用（Offline Web Applications）介绍 离线应用也是HTML5引入的新的功能之一，当客户端处于离线状态时，浏览器可以加载之前预设的保存在Cache中的资源来实现Web应用的运行，这很多是用在离线Web游戏，连连看，拼图等小游戏，以及一些功能性的web应用中，如记账软件等可以不需要实时联网的应用。当然，需要联网的应用也可以写成离线应用，如Google的离线版Gmail，用户可以正常操作所有邮件，如回复邮件，归类邮件等等，只是这些要等有网络环境后，才会生效。 目前各大浏览器对离线应用的支持情况如下图： 2. 离线应用（Offline Web Applications）创建方法 一个简单的离线应用创建和运行流程如下图所示： 1. 在HTML Page中创建一个Manifest [...]]]></description>
			<content:encoded><![CDATA[<div><strong>介绍</strong><strong> </strong></div>
<div>本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具：HTML5，JavaScript， CSS3。</div>
<div>本篇是HTML5介绍的第八篇，主要介绍HTML5的离线应用Offline Web Applications）。</div>
<div>相关文章：</div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/20/web-html5-html5/">移动Web应用程序开发 HTML5篇 (一) HTML5简介</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/22/web-html5/">移动Web应用程序开发 HTML5篇 (二) 新功能介绍和测试</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/22/webhtml5-canvas-api/">移动Web应用程序开发 HTML5篇 (三) Canvas API</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/27/web-html5-api/">移动Web应用程序开发 HTML5篇 (四) 多媒体 API</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/03/01/webhtml5-api/">移动Web应用程序开发 HTML5篇 (五) 地址位置 API</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/03/02/webhtml5-communication-api/">移动Web应用程序开发 HTML5篇 (六) 通信(Communication) API</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/03/05/webhtml5-web-sockets-api/">移动Web应用程序开发 HTML5篇 (七) Web Sockets API</a></div>
<div><strong>1. 离线应用（</strong><strong>Offline Web Applications</strong><strong>）介绍</strong><strong></strong></div>
<div>离线应用也是HTML5引入的新的功能之一，当客户端处于离线状态时，浏览器可以加载之前预设的保存在Cache中的资源来实现Web应用的运行，这很多是用在离线Web游戏，连连看，拼图等小游戏，以及一些功能性的web应用中，如记账软件等可以不需要实时联网的应用。当然，需要联网的应用也可以写成离线应用，如Google的离线版Gmail，用户可以正常操作所有邮件，如回复邮件，归类邮件等等，只是这些要等有网络环境后，才会生效。</div>
<div>目前各大浏览器对离线应用的支持情况如下图：</div>
<div><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/81.jpg" alt="" /></div>
<div>
<div><strong>2. </strong><strong>离线应用（</strong><strong>Offline Web Applications</strong><strong>）创建方法</strong><strong></strong></div>
<div>一个简单的离线应用创建和运行流程如下图所示：</div>
<div><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/82.jpg" alt="" width="187" height="282" /></div>
<div>1. 在HTML Page中创建一个Manifest Attribute，如下图所示。这个Manifest Attribute是告诉浏览器，本应用有一个名叫a.manifest的文件。</div>
<div><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/83.jpg" alt="" width="194" height="79" /></div>
<div>2. 创建manifest文件，一个典型的cache manifest文件如下图所示。</div>
<div><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/84.jpg" alt="" width="257" height="177" /></div>
<div>CACHE MANIFEST后面跟的都是可以下载下来缓存的文件，</div>
<div>NETWORK 表明是需要联网的文件，不进行缓存，</div>
<div>FALLBACK 表明可以进行替代的文件，本例中，首先从网络端获取/app/ajax文件，如果没有获取到，则加载本地cache的default.html。</div>
</div>
<div>3. 检查是否在线，使用navigator.onLine这个函数来检测，如果是TRUE则在线，否则不在线。如下图所示：</div>
<div><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/85.jpg" alt="" width="380" height="196" /></div>
<div>4. 运行offline 应用，Offline应用在运行的时候会加载相应的Offline API, window.applicationCache.status函数可以准确判断在HTML5中Offline 应用运行过程中的详细情况，一共有以下六个状态：</div>
<div><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/86.jpg" alt="" /></div>
<div>window.applicationCache有一个update()函数，在运行的时候可以去update其状态。</div>
<div>
<div><strong>3. </strong><strong>离线应用例子</strong><strong></strong></div>
<div>这一节我们实现一个缓存地址位置的例子，本例中使用到了 移动Web应用程序开发 HTML5篇 (五) 地址位置 API 这篇文章中的一些知识。先看一下运行效果</div>
<div><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/87.jpg" alt="" width="555" height="212" /></div>
<div>点击check for update,能够得到更新的地理位置信息。（上图可以得到目前所在位置的经纬度，不小心泄露了我家的地址 ：） ）。然后在开发者工具中使用离线模式，如下图所示：</div>
<div><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/88.jpg" alt="" width="456" height="303" /></div>
<div>刷新一下，在离线状态下，可以获取之前缓存下来的信息。</div>
<div>本例中的tracker.html 文件如下所示。设定Title，加载对应的脚本文件。</div>
<pre name="code" class="cpp">&lt;!DOCTYPE html&gt;
&lt;html lang="en" manifest="tracker.manifest"&gt;
&lt;head&gt;
    &lt;title&gt;HTML5 Offline Application&lt;/title&gt;
    &lt;script src="log.js"&gt;&lt;/script&gt;
    &lt;script src="offline.js"&gt;&lt;/script&gt;
    &lt;script src="tracker.js"&gt;&lt;/script&gt;
    &lt;link rel="stylesheet" href="html5.css"&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;header&gt;
      &lt;h1&gt;Offline Example&lt;/h1&gt;
    &lt;/header&gt;

    &lt;section&gt;
      &lt;article&gt;
        &lt;button id="installButton"&gt;Check for Updates&lt;/button&gt;
        &lt;h3&gt;Log&lt;/h3&gt;
        &lt;div id="info"&gt;
        &lt;/div&gt;
      &lt;/article&gt;
    &lt;/section&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<div>
<div>tracker.js中进行地理位置的获取和加载，主要函数如下：</div>
<div>
<pre name="code" class="cpp">/*
 * Track and report the current location
 */
var handlePositionUpdate = function(e) {
    var latitude = e.coords.latitude;
    var longitude = e.coords.longitude;
    log("Position update:", latitude, longitude);
    if(navigator.onLine) {
        uploadLocations(latitude, longitude);
    }
    storeLocation(latitude, longitude);
}</pre>
<div>tracker.manifest声明离线模式下加载的文件：</div>
<div>
<pre name="code" class="cpp">CACHE MANIFEST
# r128
# JavaScript
./offline.js
#./tracker.js
./log.js

# stylesheets
./html5.css

# images</pre>
<div>
<div>整个应用代码下载地址：<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/offline.zip"> 下载</a></div>
<div>本篇完，参考文献： Pro.HTML5 Programing</div>
<div>相关文章：</div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/20/web-html5-html5/">移动Web应用程序开发 HTML5篇 (一) HTML5简介</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/22/web-html5/">移动Web应用程序开发 HTML5篇 (二) 新功能介绍和测试</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/22/webhtml5-canvas-api/">移动Web应用程序开发 HTML5篇 (三) Canvas API</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/27/web-html5-api/">移动Web应用程序开发 HTML5篇 (四) 多媒体 API</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/03/01/webhtml5-api/">移动Web应用程序开发 HTML5篇 (五) 地址位置 API</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/03/02/webhtml5-communication-api/">移动Web应用程序开发 HTML5篇 (六) 通信(Communication) API</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/03/05/webhtml5-web-sockets-api/">移动Web应用程序开发 HTML5篇 (七) Web Sockets API</a></div>
</div>
</div>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/03/09/webhtml5-offline-web-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何搜索HTML5移动应用：The Everything Project</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/03/07/html5the-everything-project/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/03/07/html5the-everything-project/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 13:42:18 +0000</pubDate>
		<dc:creator>Dawei Cheng 程大伟 (Intel)</dc:creator>
				<category><![CDATA[全国大学生软件创新大赛专栏]]></category>
		<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[移动技术]]></category>
		<category><![CDATA[英特尔® 软件网络 2.0]]></category>
		<category><![CDATA[软件技术学习及认证]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web应用]]></category>
		<category><![CDATA[移动开发]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/03/07/html5the-everything-project/</guid>
		<description><![CDATA[在后PC时代我们面临的一大挑战是经常要在一大堆相互并不关联的应用中苦苦寻觅想要的应用。 和互联网不同，应用并没有通过链接相互联结起来(尽管其实可以做到)。现在的公司都在努力推出越来越多的应用，恨不得把你的整台手机都占领了，但他们都忘了为用户提供通往现有应用的窗口。你想用某个应用时是人工搜寻还是Google 搜索？你能立即判断要启动哪个应用吗？ 解决这一难题的一个可能途径是：The Everything Project--应用的移动互联网版本的搜索引擎。（注：该everything.me链接只能通过手机浏览器访问） The Everything Project目前是一个移动版网站，无论是iPhone, Android, Windows Phone或其它手机都可访问。不久它也会在各大平台上推出原生应用。 手机浏览器访问everything.me后，你会发现它的首页布有一个搜索框、变换的背景图、以及右侧的快捷入口（如图）。 每个不同的背景图都是一个推荐主题，如Everything Taylor Swift，点击以后会进入相关的搜索。所展示的主题会随人们的搜索趋势而变化。 右侧则是The Everything Project的垂直搜索入口，有社交、天气、食物、电影、购物、新闻、游戏等。 真正精彩的地方就在这看上去再普通不过的搜索框上。比如，搜索"Coldplay"。Google等搜索引擎所返回的搜索结果会是一长串的链接，而The Everything Project的返回结果则是与之相关的各种应用--不是应用商店可供下载安装的应用，或是你手机上已有的应用，而是一系列基于HTML5的可马上使用的相关网络应用。 接着，你可以点击其中的任意一款应用，如Wikipedia (Coldplay)，就会呈现相应的在Wikipedia里的关于Coldplay的内容。 The Everything Project收录了部分现成的HTML5应用，其它大部分应用则自己专门逐个定制。 "原生应用总是要比HTML5应用更好一点，但我们的系统出现以后，HTML5应用突然就变得可搜索了，这样，人们使用起来就会极为便利，因而也而具吸引力。" 联合创始人Ami Ben-David表示说。 The Everything Project是一个开放的应用平台，目前还处于测试阶段，正式发布后，任何一位开发者都可以把自己的HTML5应用加入进来。 注：文章来自36氪]]></description>
			<content:encoded><![CDATA[<p>在后PC时代我们面临的一大挑战是经常要在一大堆相互并不关联的应用中苦苦寻觅想要的应用。</p>
<p>和互联网不同，应用并没有通过链接相互联结起来(尽管其实可以做到)。现在的公司都在努力推出越来越多的应用，恨不得把你的整台手机都占领了，但他们都忘了为用户提供通往现有应用的窗口。你想用某个应用时是人工搜寻还是Google 搜索？你能立即判断要启动哪个应用吗？</p>
<p>解决这一难题的一个可能途径是：<a rel="external nofollow" href="http://everything.me/" target="_blank">The Everything Project</a>--应用的移动互联网版本的搜索引擎。（注：该<a rel="external nofollow" href="http://everything.me/" target="_blank">everything.me</a>链接只能通过手机浏览器访问）</p>
<p>The Everything Project目前是一个移动版网站，无论是iPhone, Android, Windows Phone或其它手机都可访问。不久它也会在各大平台上推出原生应用。</p>
<p>手机浏览器访问everything.me后，你会发现它的首页布有一个搜索框、变换的背景图、以及右侧的快捷入口（如图）。</p>
<p><a class="broken_link" rel="attachment wp-att-88504" href="http://software.intel.com/zh-cn/blogs/?attachment_id=88504"><img class="aligncenter  wp-image-88504" src="http://img02.36krcnd.com/wp-content/uploads/2012/03/Screenshot_2012-03-06-10-00-21.png" alt="" width="288" height="480" /></a></p>
<p>每个不同的背景图都是一个推荐主题，如Everything Taylor Swift，点击以后会进入相关的搜索。所展示的主题会随人们的搜索趋势而变化。</p>
<p>右侧则是The Everything Project的垂直搜索入口，有社交、天气、食物、电影、购物、新闻、游戏等。</p>
<p>真正精彩的地方就在这看上去再普通不过的搜索框上。比如，搜索"Coldplay"。Google等搜索引擎所返回的搜索结果会是一长串的链接，而The Everything Project的返回结果则是与之相关的各种应用--不是应用商店可供下载安装的应用，或是你手机上已有的应用，而是一系列基于HTML5的可马上使用的相关网络应用。</p>
<p><a class="broken_link" rel="attachment wp-att-88505" href="http://software.intel.com/zh-cn/blogs/?attachment_id=88505"><img class="aligncenter  wp-image-88505" src="http://img03.36krcnd.com/wp-content/uploads/2012/03/Screenshot_2012-03-06-10-07-51.png" alt="" width="288" height="480" /></a></p>
<p>接着，你可以点击其中的任意一款应用，如Wikipedia (Coldplay)，就会呈现相应的在Wikipedia里的关于Coldplay的内容。</p>
<p><a class="broken_link" rel="attachment wp-att-88507" href="http://software.intel.com/zh-cn/blogs/?attachment_id=88507"><img class="aligncenter  wp-image-88507" src="http://img04.36krcnd.com/wp-content/uploads/2012/03/Screenshot_2012-03-06-10-12-18.png" alt="" width="288" height="480" /></a></p>
<p>The Everything Project收录了部分现成的HTML5应用，其它大部分应用则自己专门逐个定制。</p>
<p>"原生应用总是要比HTML5应用更好一点，但我们的系统出现以后，HTML5应用突然就变得可搜索了，这样，人们使用起来就会极为便利，因而也而具吸引力。" 联合创始人Ami Ben-David表示说。</p>
<p>The Everything Project是一个开放的应用平台，目前还处于测试阶段，正式发布后，任何一位开发者都可以把自己的HTML5应用加入进来。</p>
<p>注：文章来自36氪</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/03/07/html5the-everything-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>移动Web应用程序开发HTML5篇 (七) Web Sockets API</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/03/05/webhtml5-web-sockets-api/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/03/05/webhtml5-web-sockets-api/#comments</comments>
		<pubDate>Mon, 05 Mar 2012 09:04:15 +0000</pubDate>
		<dc:creator>Dawei Cheng 程大伟 (Intel)</dc:creator>
				<category><![CDATA[全国大学生软件创新大赛专栏]]></category>
		<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[移动技术]]></category>
		<category><![CDATA[英特尔® 软件网络 2.0]]></category>
		<category><![CDATA[软件技术学习及认证]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web Sockets]]></category>
		<category><![CDATA[Web应用]]></category>
		<category><![CDATA[移动开发]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/03/05/webhtml5-web-sockets-api/</guid>
		<description><![CDATA[介绍 本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具：HTML5，JavaScript， CSS3。 本篇是HTML5介绍的第七篇，主要介绍HTML5的Web Sockets API。 相关文章： 移动Web应用程序开发 HTML5篇 (一) HTML5简介 移动Web应用程序开发 HTML5篇 (二) 新功能介绍和测试 移动Web应用程序开发 HTML5篇 (三) Canvas API 移动Web应用程序开发 HTML5篇 (四) 多媒体 API 移动Web应用程序开发 HTML5篇 (五) 地址位置 API 移动Web应用程序开发 HTML5篇 (六) 通信(Communication) API 介绍 Web Sockets API是HTML5的特性之一，可以通过一个Sockets实现在TCP协议层的全双工通信，Web Sockets目的是提供一个非常有效的通信工具，用来替代传统的Comet和Ajax长轮询操作。目前浏览器对其支持情况如下图： Web Sockets通信原理 在开发Web应用的过程中，很多情况下需要实时更新数据，如股票操作和分析软件，机票酒店预订软件等等。一个实时HTTP请求的Web应用，其信息流程如下图所示： 目前比较常见的有两种解决方法： HTTP的方式和AJAX方式。他们的通信流程分别如下图所示： 左边是HTTP的方式，也是最早出现的通信方式，客户端发送HTTP Request通过Web Server请求数据库，将结果返回给客户端，但是这种方式在网络通信的过程中会阻碍客户端的UI线程，尤其在实时性要求比较高的场合，网络通信的时间长了以后会直接影响用户体验，于是就出现了AJAX。 右边是AJAX的方式，客户端需要HTTP Request的时候，发起一个JavaScript Call 调用AJAX Engine，由AJAX Engine在后台进行数据请求和处理，不阻碍UI线程，用户还可以和Web进行交互，服务器端数据Ready之后，将其返回给客户端进行UI更新。 对于实时性要求高的应用，利用AJAX技术发展出了长轮询操作(Polling)的技术，有很多代表如：Comet, [...]]]></description>
			<content:encoded><![CDATA[<div><strong>介绍</strong><strong> </strong></div>
<div>本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具：HTML5，JavaScript， CSS3。</div>
<div>本篇是HTML5介绍的第七篇，主要介绍HTML5的Web Sockets API。</div>
<div>相关文章：</div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/20/web-html5-html5/">移动Web应用程序开发 HTML5篇 (一) HTML5简介</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/22/web-html5/">移动Web应用程序开发 HTML5篇 (二) 新功能介绍和测试</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/22/webhtml5-canvas-api/">移动Web应用程序开发 HTML5篇 (三) Canvas API</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/27/web-html5-api/">移动Web应用程序开发 HTML5篇 (四) 多媒体 API</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/03/01/webhtml5-api/">移动Web应用程序开发 HTML5篇 (五) 地址位置 API</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/03/02/webhtml5-communication-api/">移动Web应用程序开发 HTML5篇 (六) 通信(Communication) API</a></div>
<div>
<div><strong>介绍</strong><strong> </strong></div>
<div>Web Sockets API是HTML5的特性之一，可以通过一个Sockets实现在TCP协议层的全双工通信，Web Sockets目的是提供一个非常有效的通信工具，用来替代传统的Comet和Ajax长轮询操作。目前浏览器对其支持情况如下图：</div>
<div><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/71.jpg" alt="" width="317" height="99" /></div>
<div><strong> </strong></div>
<p><strong></p>
<div>Web Sockets通信原理</div>
<p></strong></p>
<div><strong> </strong></div>
<div>在开发Web应用的过程中，很多情况下需要实时更新数据，如股票操作和分析软件，机票酒店预订软件等等。一个实时HTTP请求的Web应用，其信息流程如下图所示：</div>
<div><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/72.jpg" alt="" width="542" height="235" /></div>
<div>目前比较常见的有两种解决方法： HTTP的方式和AJAX方式。他们的通信流程分别如下图所示：</div>
<div><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/73.jpg" alt="" width="396" height="248" /></div>
<div>左边是HTTP的方式，也是最早出现的通信方式，客户端发送HTTP Request通过Web Server请求数据库，将结果返回给客户端，但是这种方式在网络通信的过程中会阻碍客户端的UI线程，尤其在实时性要求比较高的场合，网络通信的时间长了以后会直接影响用户体验，于是就出现了AJAX。</div>
<div>右边是AJAX的方式，客户端需要HTTP Request的时候，发起一个JavaScript Call 调用AJAX Engine，由AJAX Engine在后台进行数据请求和处理，不阻碍UI线程，用户还可以和Web进行交互，服务器端数据Ready之后，将其返回给客户端进行UI更新。</div>
<div>对于实时性要求高的应用，利用AJAX技术发展出了长轮询操作(Polling)的技术，有很多代表如：Comet, Pushlets等等。长轮询操作的原理如下：</div>
<div><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/74.jpg" alt="" width="595" height="270" /></div>
<div>客户端发起一个HTTP Request，服务器端进行验证，验证通过之后，并不立刻返回数据，而是hold这个connection，当服务器端数据有更新的时候，将数据返回，返回之后客户端立刻再起一个HTTP Request从而实现实时数据更新。这种方式能够很好地实现应用数据的实时更新以及不阻碍UI线程，但是其很长时间有个HTTP connection在维持着，不仅对客户端造成很大的资源消耗，尤其对于流量和电池寿命都很有限的手机客户端，对服务器端也是非常大的挑战，没有一个应用上线，就需要维持一个Connection。而且代码量也比较大。</div>
<div>而Web Sockets API的出现很好地解决了这一问题，一旦连接建立之后，直接由Server端想客户端发数据，不需要每次单独见连接，极大地节省了流量和功耗。其原理图如下：</div>
<div><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/75.jpg" alt="" /></div>
<div>和传统长轮询操作比，使用Web Socket能够显著节省流量。下图为不同数据请求量的情况下，使用Web Sockets和长轮询的对比关系。</div>
<div><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/77.jpg" alt="" width="366" height="232" /></div>
<div><strong>使用Web Sockets API</strong></div>
<div>一个典型的Web Sockets应用创建的步骤如下图所示：</div>
<div><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/76.jpg" alt="" /></div>
<div>1. 创建一个Web Sockets的对象，代码如上图所示。其中url分别代表Scheme，Host，Port和Server。</div>
<div>2. 添加EventListener，可以监听链接状态，如上图中代码所示。链接状态有：onOpen, onMessage, onClose, onError。</div>
<div>3. 客户端发送消息。发送消息通过Web Sockets对象自带的send函数去发送。</div>
<div>4. 确保Server端已经运行。本例子通过python来创建一个本机的Server端。、</div>
<div><strong>4. Web Sockets </strong><strong>例子</strong><strong></strong></div>
<div>首先在WebSockets HTML文件在中创建如下代码：Load一个本地的ws://localhost:8080/echo URL</div>
<div>
<pre name="code" class="cpp">&lt;!DOCTYPE html&gt;
&lt;title&gt;WebSocket Test Page&lt;/title&gt;
&lt;script&gt;

    var log = function(s) {
        if (document.readyState !== "complete") {
            log.buffer.push(s);
        } else {
            document.getElementById("output").innerHTML += (s + "\n")
        }
    }
    log.buffer = [];

    url = "ws://localhost:8080/echo";
    w = new WebSocket(url);
    w.onopen = function() {
        log("open");
        w.send("thank you for accepting this Web Socket request");
    }
    w.onmessage = function(e) {
        log(e.data);
    }
    w.onclose = function(e) {
        log("closed");
    }

    window.onload = function() {
        log(log.buffer.join("\n"));
        document.getElementById("sendButton").onclick = function() {
            w.send(document.getElementById("inputMessage").value);
        }
    }
&lt;/script&gt;

&lt;input type="text" id="inputMessage" value="Hello, Web Socket!"&gt;&lt;button id="sendButton"&gt;Send&lt;/button&gt;
&lt;pre id="output"&gt;&lt;/pre&gt;</pre>
<div>
<div>用Python来写一个简单的本地Web Server来相应客户端请求，代码如下：</div>
<div>
<pre name="code" class="cpp">#!/usr/bin/env python

import asyncore
import socket
import struct
import time
import hashlib

class WebSocketConnection(asyncore.dispatcher_with_send):

    def __init__(self, conn, server):
        asyncore.dispatcher_with_send.__init__(self, conn)

        self.server = server
        self.server.sessions.append(self)
        self.readystate = "connecting"
        self.buffer = ""

    def handle_read(self):
        data = self.recv(1024)
        self.buffer += data
        if self.readystate == "connecting":
            self.parse_connecting()
        elif self.readystate == "open":
            self.parse_frametype()

    def handle_close(self):
        self.server.sessions.remove(self)
        self.close()

    def parse_connecting(self):
        header_end = self.buffer.find("\r\n\r\n")
        if header_end == -1:
            return
        else:
            header = self.buffer[:header_end]
            # remove header and four bytes of line endings from buffer
            self.buffer = self.buffer[header_end+4:]
            header_lines = header.split("\r\n")
            headers = {}

            # validate HTTP request and construct location
            method, path, protocol = header_lines[0].split(" ")
            if method != "GET" or protocol != "HTTP/1.1" or path[0] != "/":
                self.terminate()
                return

            # parse headers
            for line in header_lines[1:]:
                key, value = line.split(": ")
                headers[key] = value

            headers["Location"] = "ws://" + headers["Host"] + path

            self.readystate = "open"
            self.handler = self.server.handlers.get(path, None)(self)

            if "Sec-WebSocket-Key1" in headers.keys():
                self.send_server_handshake_76(headers)
            else:
                self.send_server_handshake_75(headers)

    def terminate(self):
        self.ready_state = "closed"
        self.close()

    def send_server_handshake_76(self, headers):
        """
        Send the WebSocket Protocol v.76 handshake response
        """

        key1 = headers["Sec-WebSocket-Key1"]
        key2 = headers["Sec-WebSocket-Key2"]
        # read additional 8 bytes from buffer
        key3, self.buffer = self.buffer[:8], self.buffer[8:]

        response_token = self.calculate_key(key1, key2, key3)

        # write out response headers
        self.send_bytes("HTTP/1.1 101 Web Socket Protocol Handshake\r\n")
        self.send_bytes("Upgrade: WebSocket\r\n")
        self.send_bytes("Connection: Upgrade\r\n")
        self.send_bytes("Sec-WebSocket-Origin: %s\r\n" % headers["Origin"])
        self.send_bytes("Sec-WebSocket-Location: %s\r\n" % headers["Location"])

        if "Sec-WebSocket-Protocol" in headers:
            protocol = headers["Sec-WebSocket-Protocol"]
            self.send_bytes("Sec-WebSocket-Protocol: %s\r\n" % protocol)

        self.send_bytes("\r\n")
        # write out hashed response token
        self.send_bytes(response_token)

    def calculate_key(self, key1, key2, key3):
        # parse keys 1 and 2 by extracting numerical characters
        num1 = int("".join([digit for digit in list(key1) if digit.isdigit()]))
        spaces1 = len([char for char in list(key1) if char == " "])
        num2 = int("".join([digit for digit in list(key2) if digit.isdigit()]))
        spaces2 = len([char for char in list(key2) if char == " "])

        combined = struct.pack("&gt;II", num1/spaces1, num2/spaces2) + key3
        # md5 sum the combined bytes
        return hashlib.md5(combined).digest()

    def send_server_handshake_75(self, headers):
        """
        Send the WebSocket Protocol v.75 handshake response
        """

        self.send_bytes("HTTP/1.1 101 Web Socket Protocol Handshake\r\n")
        self.send_bytes("Upgrade: WebSocket\r\n")
        self.send_bytes("Connection: Upgrade\r\n")
        self.send_bytes("WebSocket-Origin: %s\r\n" % headers["Origin"])
        self.send_bytes("WebSocket-Location: %s\r\n" % headers["Location"])

        if "Protocol" in headers:
            self.send_bytes("WebSocket-Protocol: %s\r\n" % headers["Protocol"])

        self.send_bytes("\r\n")

    def parse_frametype(self):
        while len(self.buffer):
            type_byte = self.buffer[0]
            if type_byte == "\x00":
                if not self.parse_textframe():
                    return

    def parse_textframe(self):
        terminator_index = self.buffer.find("\xFF")
        if terminator_index != -1:
            frame = self.buffer[1:terminator_index]
            self.buffer = self.buffer[terminator_index+1:]
            s = frame.decode("UTF8")
            self.handler.dispatch(s)
            return True
        else:
            # incomplete frame
            return false

    def send(self, s):
        if self.readystate == "open":
            self.send_bytes("\x00")
            self.send_bytes(s.encode("UTF8"))
            self.send_bytes("\xFF")

    def send_bytes(self, bytes):
        asyncore.dispatcher_with_send.send(self, bytes)

class EchoHandler(object):
    """
    The EchoHandler repeats each incoming string to the same Web Socket.
    """

    def __init__(self, conn):
        self.conn = conn

    def dispatch(self, data):
        self.conn.send("echo: " + data)

class WebSocketServer(asyncore.dispatcher):

    def __init__(self, port=80, handlers=None):
        asyncore.dispatcher.__init__(self)
        self.handlers = handlers
        self.sessions = []
        self.port = port
        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
        self.set_reuse_addr()
        self.bind(("", port))
        self.listen(5)

    def handle_accept(self):
        conn, addr = self.accept()
        session = WebSocketConnection(conn, self)

if __name__ == "__main__":
    print "Starting WebSocket Server"
    WebSocketServer(port=8080, handlers={"/echo": EchoHandler})
    asyncore.loop()</pre>
<div>
<div>本例完整代码的下载地址： <a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/websocket.zip">下载</a></div>
<div>本篇完（参考文献Pro HTML5 Programing）</div>
<div>相关文章：</div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/20/web-html5-html5/">移动Web应用程序开发 HTML5篇 (一) HTML5简介</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/22/web-html5/">移动Web应用程序开发 HTML5篇 (二) 新功能介绍和测试</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/22/webhtml5-canvas-api/">移动Web应用程序开发 HTML5篇 (三) Canvas API</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/02/27/web-html5-api/">移动Web应用程序开发 HTML5篇 (四) 多媒体 API</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/03/01/webhtml5-api/">移动Web应用程序开发 HTML5篇 (五) 地址位置 API</a></div>
<div><a href="http://software.intel.com/zh-cn/blogs/2012/03/02/webhtml5-communication-api/">移动Web应用程序开发 HTML5篇 (六) 通信(Communication) API</a></div>
<div></div>
</div>
</div>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/03/05/webhtml5-web-sockets-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>移动Web应用程序开发HTML5篇 (六) Communication API</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/03/02/webhtml5-communication-api/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/03/02/webhtml5-communication-api/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 09:09:03 +0000</pubDate>
		<dc:creator>Dawei Cheng 程大伟 (Intel)</dc:creator>
				<category><![CDATA[全国大学生软件创新大赛专栏]]></category>
		<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[移动技术]]></category>
		<category><![CDATA[英特尔® 软件网络 2.0]]></category>
		<category><![CDATA[软件技术学习及认证]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[qtwebkit]]></category>
		<category><![CDATA[移动开发]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/03/02/webhtml5-communication-api/</guid>
		<description><![CDATA[本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具：HTML5，JavaScript， CSS3。 本篇是HTML5介绍的第六篇，主要介绍HTML5的Communication API。 相关文章： 移动Web应用程序开发 HTML5篇 (一) HTML5简介 移动Web应用程序开发 HTML5篇 (二) 新功能介绍和测试 移动Web应用程序开发 HTML5篇 (三) Canvas API 移动Web应用程序开发 HTML5篇 (四) 多媒体 API 移动Web应用程序开发 HTML5篇 (五) 地址位置 API &#160; 1. Communcation API 介绍 通信（Communication）API是HTML5中用来实现正在运行的两个页面之间进行通信和信息共享的API，在开发Web应用程序时，其主要功能就是可以实现应用程序进程间通信。目前浏览器对其支持情况如下图： 2. Communcation API 运行流程 通信（Communication）API是HTML5中用来实现正在运行的两个页面之间进行通信和信息共享的API， 如上图所示， Application在进行通信的时候被分为Host page（发送信息的页面），Client Page（接受信息的页面）。 Host page在发送信息的时候可以在代码中指定其信息为广播还是指定目标和端口进行发送。 发送之后，相应的接收端可以接收相同协议的Host page发送过来的消息。 当然，接收端有一个权限验证的过程，验证其消息来源于可信区域。 3. Communication API使用介绍 通信（Communication）API在HTML5中的使用的使用步骤主要分为三步，如下图所示： 从图中，大家可以看出如何写相应的代码。 在Host page端onSendMessage函数负责发送信息，并指定信息的发送方式： [...]]]></description>
			<content:encoded><![CDATA[<p>本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具：HTML5，JavaScript， CSS3。</p>
<p>本篇是HTML5介绍的第六篇，主要介绍HTML5的Communication API。</p>
<p>相关文章：</p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/02/20/web-html5-html5/">移动Web应用程序开发 HTML5篇 (一) HTML5简介</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/02/22/web-html5/">移动Web应用程序开发 HTML5篇 (二) 新功能介绍和测试</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/02/22/webhtml5-canvas-api/">移动Web应用程序开发 HTML5篇 (三) Canvas API</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/02/27/web-html5-api/">移动Web应用程序开发 HTML5篇 (四) 多媒体 API</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/03/01/webhtml5-api/">移动Web应用程序开发 HTML5篇 (五) 地址位置 API</a></p>
<p>&nbsp;</p>
<p><strong>1. Communcation API 介绍</strong><strong> </strong></p>
<p>通信（Communication）API是HTML5中用来实现正在运行的两个页面之间进行通信和信息共享的API，在开发Web应用程序时，其主要功能就是可以实现应用程序进程间通信。目前浏览器对其支持情况如下图：</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/61.jpg" alt="" /></p>
<p><strong>2. Communcation API 运行流程</strong><strong> </strong></p>
<p>通信（Communication）API是HTML5中用来实现正在运行的两个页面之间进行通信和信息共享的API，</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/62.jpg" alt="" /></p>
<p>如上图所示，</p>
<p>Application在进行通信的时候被分为Host page（发送信息的页面），Client Page（接受信息的页面）。</p>
<p>Host page在发送信息的时候可以在代码中指定其信息为广播还是指定目标和端口进行发送。</p>
<p>发送之后，相应的接收端可以接收相同协议的Host page发送过来的消息。</p>
<p>当然，接收端有一个权限验证的过程，验证其消息来源于可信区域。</p>
<p><strong> </strong></p>
<p><strong>3. Communication API</strong><strong>使用介绍</strong><strong> </strong></p>
<p>通信（Communication）API在HTML5中的使用的使用步骤主要分为三步，如下图所示：</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/63.jpg" alt="" /></p>
<p>从图中，大家可以看出如何写相应的代码。</p>
<p>在Host page端onSendMessage函数负责发送信息，并指定信息的发送方式：</p>
<p>&nbsp;</p>
<pre name="code" class="cpp">function onSendMessage(e) {
	//Loop through all the open windows and send the message
		for(var d = 0; d &lt; windows.length; d++){
			windows[d].postMessage($('#message').val(), 'http://localhost');
			windows[d].focus();
		}
		//Reset the textarea
		$('#message').val('');
	}</pre>
<p>在Client page端messageHandler函数来接收信息。</p>
<p>&nbsp;</p>
<pre name="code" class="cpp">function messageHandler(e) {

	//Check the origin of the message
	switch(e.origin) {
		//if it is the domain that we are listening from
		case "http://experiments.72lions.com":
			$('#message').append('&lt;div&gt;' + e.data + '&lt;/div&gt;').css('display','block').stop().animate({opacity:1}, 200);
		break;
	default:
		//Do nothing if the domain is not the one we are listening from
	}
}</pre>
<p>运行结果如图所示。</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/64.jpg" alt="" /></p>
<p>完整代码下载地址： <a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/03/communication.zip">下载</a></p>
<p>&nbsp;</p>
<p>相关文章：</p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/02/20/web-html5-html5/">移动Web应用程序开发 HTML5篇 (一) HTML5简介</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/02/22/web-html5/">移动Web应用程序开发 HTML5篇 (二) 新功能介绍和测试</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/02/22/webhtml5-canvas-api/">移动Web应用程序开发 HTML5篇 (三) Canvas API</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/02/27/web-html5-api/">移动Web应用程序开发 HTML5篇 (四) 多媒体 API</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/03/01/webhtml5-api/">移动Web应用程序开发 HTML5篇 (五) 地址位置 API</a></p>
<p>本篇完，参考文章. Pro HTML5 Programing</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/03/02/webhtml5-communication-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

