这一切的根源,其实是在互联网早期,也就是上世纪90年代主导浏览器市场的微软,与负责web技术标准的W3C组织并不是一条心、双方各自奉行不同的标准所致。要知道,在新兴市场形成的早期通常都是建立标准的最佳时机,但当时最终的结果却是微软凭借着Windows的超高市占率,让IE的标准成为了用户的事实标准。
由于当初微软放弃了进入W3C,导致这一组织在Web技术标准上空有权威性、却基本不存在强制力,而2004年诞生的WHATWG(网页超文本技术工作小组),也更是让W3C的权威性大损。早在2004年时,W3C试图抛弃HTML转向XHTML,导致了苹果、Opera、Mozilla的不满,三家甩开W3C建立WHATWG开发了Web Applications 1.0,也就是现在的HTML 5。
虽然到了2007年W3C接纳了WHATWG,并同时将HTML 5作为Web技术的新标准,但W3C也就此失去了制定“标准浏览器”的能力。
当初微软不加入W3C,使得后者不采用IE的方案,而在IE掉队,Chrome与Firefox崛起后,已经有大量开发者基于IE标准开发了大量的Web产品,让浏览器不得不用兼容模式来解决这一问题。再加上不同浏览器采用的内核不同,由于缺乏统一的开发标准,以及各大浏览器厂商为了凸显产品的特色,更是使得整个浏览器行业出现了百花齐放的状态。
在过去很长的一段时间里,跨浏览器开发、并解决浏览器的兼容问题,成为了前端开发者最为头疼却必须要解决的问题。而他们所要面临的问题,就是开发者的代码运行环境本身并不掌控在自己手中(服务器端)、而是在客户端(用户的浏览器),因此也不得不尽一切可能去协调各式各样的浏览器。
众所周知,在PC互联网时代,浏览器市场有四大内核,即微软IE浏览器的Trident内核、苹果Safari和谷歌Chrome的Webkit内核、Firefox浏览器的Gecko内核,以及Opera浏览器的Presto内核。不同内核代表着浏览器的渲染引擎不同,而渲染引擎又是负责取得网页内容(HTML、XML、图像)、整理信息(加入CSS样式等),以及计算网页显示方式,然后输出至显示设备的关键。
不同浏览器内核不同的情况下,渲染逻辑自然也就不一样,就会导致同一份代码有的浏览器显示的正常、有的就不正常。例如,不同浏览器对HTM标记所具有的内外边距属性就有着不同的定义,对同一个网页元素重复设置多种样式时、处理优先级不一样,图片的位置设置在不同浏览器中显示效果不同等等,都是极为常见的。
目前,业界最主流的解决方案是“css hack”,而css (层叠样式表)则是用来表现HTML或XML等文件样式的计算机语言,是控制网站样式和布局的关键,也就是大家在浏览器上看到的网页显示效果,其实就是由css负责。由于不同厂商浏览器或某浏览器的不同版本对css的支持、解析不一样,就要求开发者来编写相应的css code。简单来说就是大力出奇迹,用因地制宜来解决问题。
css hack将压力抛给了开发者,为此部分开发者会在网页上设置浏览器检测,针对某些(IE)浏览器甚至直接拒绝服务,以至于没有兼容模式的Edge(Trident内核)在遇到网页检测浏览器时,干脆就声称自己是Chrome。显然这不是一个完美的解决方案,但奈何W3C组织不给力、浏览器厂商又各有各的算盘,所以解决浏览器之间的兼容性问题也就被束之高阁了。
那么,为什么在移动互联网时代、APP已经动摇了浏览器市场地位的当下,谷歌、微软、苹果和Mozilla又要携手来解决这一问题呢?