<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[万川]]></title>
  <subtitle type="html"><![CDATA[成都前端开发工程师]]></subtitle>
  <id>http://www.brjhi.com/blog/</id>
  <link rel="alternate" type="text/html" href="http://www.brjhi.com/blog/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.brjhi.com/blog/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.8">PJBlog3</generator> 
  <updated>2011-10-20T17:03:36+08:00</updated>

  <entry>
	  <title type="html"><![CDATA[获取输入框焦点，字段清空]]></title>
	  <author>
		 <name>brjhi</name>
		 <uri>http://www.brjhi.com/blog/</uri>
		 <email>brjhi@163.com</email>
	  </author>
	  <category term="" scheme="http://www.brjhi.com/blog/default.asp?cateID=3" label="原创" /> 
	  <updated>2011-10-20T17:03:36+08:00</updated>
	  <published>2011-10-20T17:03:36+08:00</published>
		  <summary type="html"><![CDATA[<p>&nbsp;</p>
<p>根据父级id，找到其所有input对象，不用每个去判断，不用每个加id，遗憾的是IE下，当dom已经加载，input的type属性无法修改。</p>
<div class="codeText">
<div class="codeHead">Javascri&#112;t代码</div>
<ol class="dp-c" start="1">
    <li class="alt"><span><span class="keyword">function</span><span>&nbsp;$(id){&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;document.getElementById(id);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li><span><span class="keyword">function</span><span>&nbsp;clickInput(elementId,&nbsp;currentClassName,&nbsp;newClassName){&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;input=$(elementId).getElementsByTagName(</span><span class="string">&quot;input&quot;</span><span>),&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i=0,&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l=input.length,&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value=[];&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>(;&nbsp;i&lt;l;&nbsp;i++){&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value.push(input[i].value);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keyword">function</span><span>(){&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;n=i;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input[i].onfocus=<span class="keyword">function</span><span>(){&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>((input[n].value==value[n])&nbsp;&amp;&amp;&nbsp;(input[n].value!=</span><span class="string">&quot;password&quot;</span><span>)){&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input[n].value=<span class="string">&quot;&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input[n].className=newClassName;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>((input[n].value==value[n])&nbsp;&amp;&amp;&nbsp;(input[n].value==</span><span class="string">&quot;password&quot;</span><span>)){&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input[n].type=<span class="string">&quot;password&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input[n].value=<span class="string">&quot;&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input[n].className=newClassName;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input[i].onblur=<span class="keyword">function</span><span>(){&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>((input[n].value==</span><span class="string">&quot;&quot;</span><span>)&nbsp;&amp;&amp;&nbsp;(input[n].type!=</span><span class="string">&quot;password&quot;</span><span>)){&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input[n].value=value[n];&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input[n].className=currentClassName;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>((input[n].value==</span><span class="string">&quot;&quot;</span><span>)&nbsp;&amp;&amp;&nbsp;(input[n].type==</span><span class="string">&quot;password&quot;</span><span>)){&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input[n].type=<span class="string">&quot;text&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input[n].value=value[n];&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input[n].className=currentClassName;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})();&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li><span>clickInput(<span class="string">&quot;forms&quot;</span><span>,&nbsp;</span><span class="string">&quot;forms_text&quot;</span><span>&nbsp;,&nbsp;</span><span class="string">&quot;forms_text1&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>&nbsp;</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.brjhi.com/blog/article.asp?id=5" /> 
	  <id>http://www.brjhi.com/blog/default.asp?id=5</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Firefox的Linear Gradients]]></title>
	  <author>
		 <name>brjhi</name>
		 <uri>http://www.brjhi.com/blog/</uri>
		 <email>brjhi@163.com</email>
	  </author>
	  <category term="" scheme="http://www.brjhi.com/blog/default.asp?cateID=4" label="转载" /> 
	  <updated>2011-09-11T15:56:57+08:00</updated>
	  <published>2011-09-11T15:56:57+08:00</published>
		  <summary type="html"><![CDATA[Firefox的Linear Gradients (线性渐变)的几点说明：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Firefox的Linear Gradients (线性渐变) 基本语法：background-image:-moz-linear-gradient([&lt;point&gt; | | &lt;angle&gt;，] , 开始颜色值,结束颜色值, [(停靠颜色值,偏移量百分数),...] );<br/>&nbsp;&nbsp;&nbsp;&nbsp;-moz-linear-gradient是background的一个属性值；<br/>&nbsp;&nbsp;&nbsp;&nbsp;第一组参数&lt;角度位置&gt;为非常灵活，他的基本组成点位 &lt;point&gt; （ 渐变的出发点 ）和角度；<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;point&gt; 渐变的出发点: 它可以被指定为一个百分比，像素，或使用“left”，“center”或“right”的水平和“top”，“center”，或“buttom”的垂 直定位。 位置从最受影响的元素左上角。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果只在水平渐变的话，只要设置：“left center”或“right center”，如果垂直渐变的话设置“center top”或者“center buttom”。Firefox下可以省略掉 “center”，也就是如果只在水平渐变的话，只要设置：“left”或“right”，如果垂直渐变的话设置“top”或者“buttom”。（查看例子）<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果这两个值是百分比的值的话，那么第一个是水平渐变位置，第一个是垂直渐变位置，这个时候还需要一个角度值，比如 “90deg”；这个可以看本页的例子；<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;还可以是只有一个角度值。（查看例子）<br/>&nbsp;&nbsp;&nbsp;&nbsp;(开始颜色值),(结束颜色值)是两个渐变颜色值；<br/>&nbsp;&nbsp;&nbsp;&nbsp;[(停靠颜色值,偏移量百分数),...]：可以使用多个color-stop，如果渐变只有2个颜色，那么可以不使用该参数；偏移 量必须为0%~100%；<br/>&nbsp;&nbsp;&nbsp;&nbsp;webkit内核的safari、 Chrome下的Linear Gradients (线性渐变) 请参阅：<a href="http://www.css88.com/archives/2154" target="_blank" rel="external">http://www.css88.com/archives/2154</a><br/>&nbsp;&nbsp;&nbsp;&nbsp;ie下可以使用渐变滤镜，请参阅： <a href="http://msdn.microsoft.com/en-us/library/ms532997" target="_blank" rel="external">http://msdn.microsoft.com/en-us/library/ms532997</a>(VS.85).aspx<br/><br/>Firefox的Linear Gradients (线性渐变)的演示：<a href="http://www.css88.com/tool/css3Preview/Linear-Gradients-moz.html" target="_blank" rel="external">http://www.css88.com/tool/css3Preview/Linear-Gradients-moz.html</a><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.brjhi.com/blog/article.asp?id=3" /> 
	  <id>http://www.brjhi.com/blog/default.asp?id=3</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Webkit内核浏览器的Linear Gradients]]></title>
	  <author>
		 <name>brjhi</name>
		 <uri>http://www.brjhi.com/blog/</uri>
		 <email>brjhi@163.com</email>
	  </author>
	  <category term="" scheme="http://www.brjhi.com/blog/default.asp?cateID=4" label="转载" /> 
	  <updated>2011-09-11T15:47:52+08:00</updated>
	  <published>2011-09-11T15:47:52+08:00</published>
		  <summary type="html"><![CDATA[webkit内核的safari、 Chrome的Linear Gradients (线性渐变)的几点说明及演示：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;webkit内核的safari、 Chrome的Linear Gradients (线性渐变) 基本语法：background-image:-webkit-gradient(type,x1 y1, x2 y2, from(开始颜色值),to(结束颜色值), [color-stop(偏移量小数,停靠颜色值),...] );<br/>&nbsp;&nbsp;&nbsp;&nbsp;-webkit-gradient是background的一个属性值；<br/>&nbsp;&nbsp;&nbsp;&nbsp;webkit内核的Linear Gradients (线性渐变) 第一组参数type（类型）为 linear；<br/>&nbsp;&nbsp;&nbsp;&nbsp;第二组参数是,x1 y1, x2 y2,当成颜色渐变体的两个点的坐标就是。x1,x2,y1,y2的取值范围为0%-100%，当x1,x2,y1,y2取值为极值的时候，x1和x2可以取值left（或0%）或right（或100%），,y1和y2可以取值top（或0%）或bottom（或100%）；<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当x1等于x2，y1不等于y2，实现垂直渐变，调整y1，y2的值可以调整渐变半径大小；<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当y1等于y2，x1不等于x2，实现水平渐变，调整x1，x2的值可以调整渐变半径大小；<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当y1不等于y2，x1不等于x2，实现角度渐变，当x1,x2,y1,y2取值为极值的时候接近垂直渐变或水平渐变；<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当x1等于x2，y1等于y2，实现没有渐变，取from色，即“ from(颜色值) ”；<br/>&nbsp;&nbsp;&nbsp;&nbsp;实现垂直渐变和水平渐变渐变时，x1和x2可以最简单的取值是left（或0%）或right（或100%）,y1和y2可以最简单的取值是top（或0%）或bottom（或100%）；<br/>&nbsp;&nbsp;&nbsp;&nbsp;from(开始颜色值),to(结束颜色值)是两个渐变颜色值；<br/>&nbsp;&nbsp;&nbsp;&nbsp;[color-stop(偏移量&lt;小数&gt;,停靠颜色值),...]：可以使用多个color-stop，如果渐变只有2个颜色，那么可以不使用该参数；偏移量必须为小数，如果偏移量&gt;=1,那么该color-stop相当于无效；<br/>&nbsp;&nbsp;&nbsp;&nbsp;firefox下的Linear Gradients (线性渐变) 请参阅：<br/>&nbsp;&nbsp;&nbsp;&nbsp;ie下可以使用渐变滤镜，请参阅： <a href="http://msdn.microsoft.com/en-us/library/ms532997" target="_blank" rel="external">http://msdn.microsoft.com/en-us/library/ms532997</a>(VS.85).aspx<br/><br/>webkit内核的safari、 Chrome的Linear Gradients (线性渐变)演示地址：<a href="http://www.css88.com/tool/css3Preview/Linear-Gradients.html" target="_blank" rel="external">http://www.css88.com/tool/css3Preview/Linear-Gradients.html</a>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.brjhi.com/blog/article.asp?id=2" /> 
	  <id>http://www.brjhi.com/blog/default.asp?id=2</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[思考：HTML5将带来什么？]]></title>
	  <author>
		 <name>brjhi</name>
		 <uri>http://www.brjhi.com/blog/</uri>
		 <email>brjhi@163.com</email>
	  </author>
	  <category term="" scheme="http://www.brjhi.com/blog/default.asp?cateID=4" label="转载" /> 
	  <updated>2011-09-10T22:54:44+08:00</updated>
	  <published>2011-09-10T22:54:44+08:00</published>
		  <summary type="html"><![CDATA[　　作为科技巨头的角力工具，这个互联网产业迫切需要的新标准，其诞生很可能会是个漫长的过程。<br/><br/>　　2010年上半年的苹果与Adobe的冲突，使HTML5的存在一夜之间被很多人所知晓。在乔布斯的煽动下，这一已经在科技界潜行数年的下一代Web标准，被迅速拎到了台面上，苹果、谷歌、微软这科技界三巨头，连同众多业界明星，似乎突然对HTML5变得情有独钟，利益集团的之间的争夺，成了这个技术最好的催化剂。<br/><br/><img src="http://img.cyzone.cn/articleimg/20117/0359a4e242cb45ee82b026fde392cd52.jpg" border="0" alt=""/><br/><br/>　　HTML5的火热似乎暗合了“合久必分，分久必合”的旧理。愈发多样化的互联网应用与现有平台割据之间的矛盾，产生了对标准统一Web标准的迫切需求，而HTML5正是担负这一使命的最佳候选——现在看来，也是唯一候选。<br/><br/>　　显然，它的重要性不言而喻。而围绕着这一标准的争夺，势必会激起科技界的惊涛骇浪。<br/><br/>　　HTML5的革命<br/><br/>　　HTML即超文本标记语言或超文本链接标示语言，是目前网络上应用最为广泛的语言，也是制作网页的主要语言。诞生于1993年的HTML，其文档制作并不是很复杂，且功能强大，支持不同数据格式的文件嵌入。<br/><br/>　　然而，HTML的最近一次升级还是1999年12月发布的HTML4。<br/><br/>　　乔布斯在檄文《关于Flash的思考》一文中说：“Flash是PC时代的产物，它是为个人电脑与鼠标发明的。”──其言外之意就是说已经不适应现在移动终端的需求。的确，诞生于上世纪末的HTML4仅是PC时代的产物(后继的XHTML语言除了语法外与HTML4几乎没有区别)，在它诞生至今的10年里面，互联网世界已经发生了天翻地覆的变化：Netscape灰飞烟灭，微软的IE如今已经演化到了IE9;Firefox 从 Netscape 的死灰中诞生，重新占据了第二位;Safari和Chrome组成的Webkit(浏览器架构的一种)阵营为移动互联网世界勾画出了蓝图。<br/><br/>　　更重要的是，在如今的后Web2.0时代，人机交互、人网交互已经成为常态，对富媒体应用和本地存储的支持乏力成为现有浏览器的心腹之患。而将Web由内容平台改造为标准化的应用平台，并统一各大平台阵营的标准，正是HTML5的终极使命。<br/><br/>　　HTML5主要有以下几个特色：降低插件的重要性，简化Web开发;大幅提高对动态图像、位置服务、本地存储的支持;提高浏览器安全性。<br/><br/>　　很多业内人士认为HTML5以上特点是具有革命性的，特别是其丰富的标签体系，类似于内置了很多快捷键，将取代那些完成比较简单任务的插件，可以降低应用开发的技术门槛。<br/><br/>　　其实，由于鼓励创新，互联网在之前是非常欢迎浏览器插件的。而声音、动画及其他一些非常生动的网页，通过Adobe、 RealAudio、微软以及其他的一些公司开发的插件在网络呈现时也的确让人耳目一新。然而，问题很快就出现了，插件的接口是向所有人开放的，每个人都在尝试用自己定义的技术给网页增加新的功能，混乱不可避免。其中最有名的插件就是Flash，其他类似的插件更是数不胜数。<br/><br/>　　HTML5有望解决这一问题。举例来说，HTML5中的“video”标签使Web开发人员很容易地把视频内容与网页中的其他内容整合起来，使得Web的多媒体开发不再仅仅是使用Adobe的Flash、 微软的Silverlight和升阳的JavaFX——这些被垄断的富媒体开发工具的人员的专利。显然，这对互联网的富媒体化大有裨益。<br/><br/>　　总之，从获取到互动，从图片到视频，从云端到终端，当下互联网的复杂性，迫切需要HTML5这样的救世主出现。<br/><br/>　　其实，HTML5的诞生本身就是创新派“革命”的结果:万维网之父Tim Berners-Lee在创造出HTML的同时，建立了互联网标准化组织W3C(万维网联盟)。然而，在HTML之路上行走数年之后，W3C已经跟不上互联网时代的步伐。W3C当时认为，HTML4已经功德圆满，他们的下一步工作是语法升级的可扩展超文本置标语言XHTML。他们认为其可以将Web带入光明的未来。<br/><br/>　　然而，作为第三方的W3C组织忽略了一个重要的变量——在互联网时代崛起的科技巨头。实际上，在Netscape消失之后，IE并没有一统江湖。恰恰相反，浏览器进入了战国时代。Firefox、Opera、Safari相继诞生，而它们的背后都有着强大的支持力量。<br/><br/>　　于是，由于不满“互联网造物主”——W3C的思维僵化行为拖沓，苹果公司等新贵们自发组织成立了新的超文本语言标准工作组，这就是WHATWG(超文本应用科技工作组)，其使命便是致力于HTML5的规范和普及。<br/><br/>　　现在看来，这些充满了野心和动力的科技巨擘，显然比无私的“互联网造物主”有力量的多。<br/><br/>　　巨人的战场<br/><br/>　　毫无疑问，HTML5将是未来互联网技术的制高点。围绕这个制高点，科技巨头们必将展开激烈的争夺。目前来看，争夺的主角，再一次锁定在了苹果和谷歌为首的两大阵营。<br/><br/>　　在苹果方面，其不断扩张的业务结构中，软件的权重始终是处于较弱的位置，比起Mac机与iPhone，其核心软件在业界的影响还要小的多。而HTML5为苹果改变这种局面，提供了千载难逢的良机。可以预见，依托其出色硬件平台，苹果将向HTML5高地展开持续攻势。<br/><br/>　　在谷歌方面，虽然它入局较晚，但其必然不会将互联网技术的优势地位拱手相让。实际上，除了在线软件领域的优势之外，谷歌TV、谷歌手机等硬件尝试，其根本目的便是为其软件拓展探路。比如谷歌的Nexus One手机就曾被用来展示最新的Flash Player 10.1。<br/><br/>　　在这场抢占互联网未来的制高点战役中，苹果与谷歌可谓针锋相对：<br/><br/>　　乔布斯批判Flash，谷歌马上在I/O大会上抨击苹果违背互联网精神;由于HTML5标准中没有指定任何的视频编解码器，在苹果明确提出自己掌握知识产权的H.264标准建议之后，谷歌在I/O大会上便提出了WebM标准;当苹果在主页中为HTML5特别开辟一个栏目之后，谷歌针锋相对地推出自己的HTML5“练兵场”——HTML5 ROCKS;双方都在抢先发布HTML5新特性……<br/><br/>　　在巨头们的强硬姿态下，各种科技力量已经开始站队。例如，包括Opera，Mozilla，Adobe等软件巨头和AMD，ARM，NVIDIA，Qualcomm在内硬件巨头明确表示支持谷歌的WebM标准;而之前蓝光阵营的索尼、富士、三星等公司，则本身就是H.264的专利拥有方之一。<br/><br/>　　在这场争夺中，特别值得关注的是软件领域的老大微软的态度。其也已经在HTML5领域密集布局。目前来看，一方面，微软欲利用既得优势树立自己的标准，如其宣布Chrome， Firefox和Safari并不适合处理HTML5内容，而自己的IE9渲染HTML5动画的速度是Chrome 5、Safari的12倍以上等。另一方面，与谷歌放弃正在开发的位置服务技术Gear而转投HTML5不同，微软肯定不会轻易放弃Silverlight，其在口头支持HTML5的同时，是否会沿用捆绑销售的老伎俩尚未可知。<br/><br/>　　除了主张自己的主导标准外，在其他HTML5细节上，微软似乎与苹果站得更近些。例如，其已经公开宣布支持H.264标准。当然，这可能与其和苹果一样同为封闭性研发体系，并同为H.264专利拥有方之一有关。<br/><br/>　　按照计划，WHATWG将在2012年向W3C提交HTML5规划。但历史证明：HTML5完成它的使命将并非易事。<br/><br/>　　从2003年WHATWG公布HTML5草案算起，已过7年光景，HTML5并没有诞生，WHATWG的最大进展仅是促使潜在对手XHTML 2.0的夭折——2008年，W3C宣布，其工作重点已经转移到HTML5方向上。<br/><br/>　　之所以WHATWG进展也如此缓慢，原因同样是由于平台的割据，并且形态更为复杂。从采用不同操作系统的手机，到各家的应用程序商店;从尚处于少年期的云端技术到各家保留的专利。特别是已经势同水火的苹果与谷歌，对于连互联网电视都要各立山头的它们来说，什么变量才会使他们妥协于同一种大互联网标准呢?<br/><br/>　　而对于那些“卫星国”来说，滋味可能更为难受。虽然与苹果都有某种嫌隙的它们被谷歌拉到I/O大会上，势成“倒乔联盟”，但在实际商业生存中它们会与哪方合作还尚未可知。<br/><br/>　　比如，H.264在团结了硬件播放器阵营发展多年之后，已经成为实际上的下一代互联网视频技术，连谷歌自己的Youtube都已经向它敞开了大门，“卫星们”还会拒绝么?对于它们来说，不停的换队(如同Palm的生存状态)显然是件痛苦的事情，但商业利益的考量显然要压倒一切。<br/><br/>　　可见，虽然各方对统一标准、提高互联网易用性的目标还是一致的，但是在各方完成博弈之前，人们还要一直等待下去。<br/><br/>　　显然，虽然HTML5时代令人兴奋，但是它的真正到来，很可能将是一个漫长的过程。<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.brjhi.com/blog/article.asp?id=1" /> 
	  <id>http://www.brjhi.com/blog/default.asp?id=1</id>
  </entry>	
		
</feed>

