DBMNG数据库管理与应用

书籍是全世界的营养品。生活里没有书籍,就好像没有阳光;智慧里没有书籍,就好像鸟儿没有翅膀。
当前位置:首页 > 经验分享 > WEB

IE9中X-UA-Compatible失效的问题与值: 对象为 null 或未定义

好端端的W3C标准页面被硬生生渲染成IE5,惨不忍睹。而在F12工具中强制调成IE9标准渲染模式,全部正常。于是研究了一下问题在哪。

关于X-UA-Compatible和IE的Quirks Mode模式,Google一下有很多说明,这里有三篇很详细的文章:
[1] http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx
[2] http://www.fantxi.com/blog/archives/browser-mode/

由于手上的一个项目,用到ExtJS,而版本也是3.0的,后发现在IE9中,ExtJS里的tree控件不能点击了,发现ExtJS3.0不支持IE9的,只有想其他办法,第一想法就是让IE9默认采用IE8的兼容模式运行。

将以下代码放于里面,最好是放在离最近的一个元素。

1
<metahttp-equiv="X-UA-Compatible"content="IE=9"/>

另查到资料,说以下代码也行,但是怎么测试都行不通,是不是脸大的缘故,总之呢,下面的一个不行,上面一个肯定行,自己试下吧。

1
<metahttp-equiv="X-UA-Compatible"content="IE=EmulateIE8"/>

这样IE9打开该页面就默认用IE8的兼容模式进行渲染,不兼容的问题就解决了。

但是呢,不知道是不是我脸大的缘故,在IE9下面,iframe本来好好的,但是一加入:

1
<metahttp-equiv="X-UA-Compatible"content="IE=9"/>

iframe的高度瞬间崩溃了,这个纠结啊,搞了2个小时,搞不定,那也只好将就下吧,如果IE9就插入这段代码,但是要注意,千万不要用以下代码:

1
2
3
<!--[ifIE 9]>
<meta http-equiv="X-UA-Compatible"content="IE=9"/>
<![endif]-->

上面第注释的代码无论如何设置content都是无效的,IE9不会识别。搜索了一下,发现有两种说法。一种认为在X-UA-Compatible之前必须至少有一个meta标签[4]。另一种说法是X-UA-Compatible之前不能有script标签[5],后一种说法应该是比较靠谱的,因为在官方的说明文章里有这么一句[1]:
The X-UA-Compatible header is not case sensitive; however, it must appear in the header of the webpage (the HEAD section) before all other elements except for the title element and other meta elements.

但问题是我源码的相应位置并没有script标签。迟疑很久,我怀疑是之前IE注释的问题,不仅如此,经过调试发现这些注释在IE中根本没有生效(IE注释的作用见参考资料[6])。于是试着把它去掉变成:

1
2
3
4
5
6
<head>
<title>1600ML! 微车世界 管理中心</title>
<meta http-equiv="X-UA-Compatible"content="IE=9"/>
<meta http-equiv="Content-Type"content="text/html; charset=utf-8">
<meta content="1600ML Inc." name="Copyright"/>
</head>

如果是php脚本的话,可以做个判断,这样就可以避免其他的一些问题,相关代码:

1
2
3
4
5
6
<?php
$mbrowser= $_SERVER['HTTP_USER_AGENT'];
if(strpos($mbrowser, 'MSIE 9.0')){
    $xuacompatible= '<meta http-equiv="X-UA-Compatible" content="IE=9" />';
}
?>

然后将变量放入html代码里,这样就可以进行浏览器判断了。

附上主流的浏览器判断:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
if(strpos($mbrowser, 'MSIE 9.0')){
    //省略自写
}
if(strpos($mbrowser, 'MSIE 8.0')){
    //省略自写
}
if(strpos($mbrowser, 'MSIE 7.0')){
    //省略自写
}
if(strpos($mbrowser, 'MSIE 6.0')){
    //省略自写
}
if(strpos($mbrowser, 'Opera')){
    //省略自写
}
if(strpos($mbrowser, 'Chrome')){
    //省略自写
}
 
if(strpos($mbrowser, 'Firefox')){
    //省略自写
}
//其他如出一辙……
?>

结论:X-UA-Compatible最好紧跟在head之后,之前不要有任何不标准的标签。

IE中存在多个文档模式,比如Quirks Mode,Standard Mode等。 这给Web开发者造成不少困惑。以下流程图全面完整解释了IE9是如何判断选择文档模式的,请参考。

from:http://blog.csdn.net/z69183787/article/details/20609101
本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号