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

来源:互联网 发布:元数据定义都用大写吗 编辑:程序博客网 时间:2024/05/17 22:43

好端端的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是如何判断选择文档模式的,请参考。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 做酵素剩下的水果怎么办 喝了酵素胃疼怎么办 海科融通不到账怎么办 美团外卖没生意怎么办 淘宝联盟领券销售怎么办 微信返利被骗了怎么办 众筹失败后资金怎么办 健身房不给退卡怎么办 婆婆陷入民间传销组织怎么办 被三生公司骗了怎么办? ppt保存成了图片怎么办 苹果6速度变慢了怎么办 苹果6s速度很慢怎么办 微信支付上限了怎么办 佳享健康骗老人怎么办 宝宝吃了硅胶乳贴怎么办 用完卫生巾后阴部有些不舒服怎么办 指甲上有荧光剂怎么办 小孩吃了荧光剂怎么办 毛巾上有荧光剂怎么办 用过劣质面膜后怎么办 液体硅胶奶嘴煮完有味怎么办 后跟贴粘在鞋上怎么办 优化营商环境公安怎么办 提升营商环境公安怎么办 准予迁入证明过期了怎么办 粉底液容易脱妆怎么办 家人进了火疗传销怎么办 自发热护膝洗了怎么办 用气垫bb卡粉怎么办 贴药膏后皮肤过敏红肿怎么办 贴完膏药皮肤痒怎么办 猕猴桃吃的嘴疼怎么办 摩拜单车怎么办月卡 出国忘了带护照怎么办 雅漾喷雾失压了怎么办 洗衣服时衣服粘上卫生纸怎么办 一晚上卫生巾都是满的怎么办 宝宝头上痱子痒怎么办 短裤里的宽松紧带拧了怎么办 肉色内衣被染黑色了怎么办