热搜:NVER node 开发 php

IE兼容模式_html/css_WEB-ITnose

2024-11-16 13:40:01
IE兼容模式_html/css_WEB-ITnose

每当我接到电话或者是PM和我说:“那个xxx版型怎么跑掉了”或者说:“那个xxx的页面连接(Ajax 连接)怎么点下去页面只显示图和文字而其他部份都不见了”?

通常我会问两个问题:你是不是用IE?请问你的IE版本是多少?

通常来说,对方都是使用IE,而如果使用的是IE7,我只能在心理呐喊:“天哪、拜托可不可以升级或换浏览器啊”然后用客气的口吻把心理想的和对方沟通。如果不能换,那我只能拿掉一些比较新技术的东西,例如Ajax、css3等。

不过有时候我会遇到对方用的是比较新的IE,IE8以上,但是对方再使用网站会有问题,例如,点下ajax连接竟然直接显示Ajax内容而不是更新到页面某一个位置,或者Css整个跑掉,甚至页面空空的因为浏览器看不懂某个JS Framework。这些其实让我头痛了不久,因为在我电脑同样的IE明明就不会啊?

后来我终于找到了解法,也终于弄懂到底是怎么一回事,原来是IE的“兼容模式(Compatibility View)。(如果对接下来内容不感兴趣,或者急需知道答案,请直接卷到最后)。

和为IE兼容模式

在早起IE8之前,那个时候IE浏览器还属于比较独大的情况,那个时候他有很多东西是和网络的Standard不太一样。譬如他有自己才看的懂得自定义Tag。作为那个时代,很多网站都是以那个时候的IE作为目标浏览器去写的网页。

随著时间的进步,微软意识到自己搞自己的是不行的,需要跟Web Standard一样,慢慢的以前那些旧的只属于IE有的东西就在新的IE里面没有了。

但是为了以前浏览器而设计的网站要怎么办?他们就处于很尴尬的局面,因为如果不支持很多旧网站除了会跑版以外最要命是有些功能都会有问题。

为了解决这个问题,微软在IE8以后很佛心的加入了所谓的兼容性模式,也就是能够在旧的网站使用兼容性模式浏览,而一切正常,而到比较新的网站就用正常模式浏览。

听起来很棒,有问题的旧网站使用IE 兼容模式,新网站使用正常模式。但是这个有一个前提,那就是使用者要知道兼容性模式的意义和如何切换

兼容性模式如何变成问题

假设今天我用兼容性模式浏览一个比较新的网站,会发现有很多问题。首先,很多Jquery的东西都会怪怪的,像Ajax就不起作用了,或者一些JS UI Framework就完全毁掉了。

那你或许会说,就不要开兼容性模式不就好了?但问题是很多使用者不知道这个,而你和他介绍他也不一定听得懂。而最大的问题是,兼容性模式这个东西是可以设定说一直开启。

在一些公司里面,兼容性模式是预设开启的,意味著他们浏览很多网页都是处于那种状态,而使用者不一定知道如何把它关掉。

微软的解决办法

微软在这一篇有提到关于如何解决兼容性问题。他说,首先网页一定要设定docType,如果不设定,就会以Quirks mode(IE5)浏览。

但问题是如果使用者设定使用兼容模式浏览,就算有docType他也会以兼容模式浏览,那该怎么办?

微软因此说我们可以加一个metatag告知要使用的IE版本,而也是使用这个就能够强制不要使用兼容模式浏览。

那个“IE=Edge”表示使用目前IE最新的正常模式去浏览。当然,你也可以指定要使用哪一个版本的IE去浏览。

加上Chrome=1

我在网络上搜索的时候,发现有些人会在最后面加上Chrome=1,变成:

好奇的去搜索了一下,发现到StackOverflow也有人问了相同问题,才发现原来Chrome有一个IE Add on叫做Chrome Frame,而作用就是在IE内使用Chrome来显示页面,这样老旧的IE就可以浏览一些新的页面也不出问题,而那个Chrome=1就表示如果有装,就启用。