模仿IE7 IE8的,但不是IE9使用“X-UA兼容”模仿IE7 IE8的,但不是IE9使用“X-U

2019-05-13 07:06发布

我有一个网站,根据矢量绘图的Internet Explorer我使用VML和其他浏览器,我使用SVG 。 IE8但不具备谁也离不开回落到具有VML IE7模式支持。

因此我包括<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

问题(当然,实际上是一件好事)是IE9现在已经支持SVG,所以我不希望它回落到具有更糟糕的性能和兼容性IE7模式。 我怎么只能告诉IE8回落到IE7模式,但让IE9留在IE9模式?

现在,我在代理做服务器端检查是否包含在头部或不EmulateIE7字符串,但我想避免这种情况,只要有可能。

Answer 1:

我只是有一出戏,发现了以下工作对我来说:

<meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" >

这是一个逗号而不是分号!

我没有看过的规范,但格式类似内容=“IE = 7,镀铬= 1”,对Chrome Frame的作品。 我还发现,内容=“IE = 7,9”的作品,但我怀疑是不是正确的格式。

编辑:

当心一个严重的问题,如果你的网页是在iframe中。 如果你使用上面的框架页面,父是在任何模式下小于IE9严格,那么IE9将回落到IE8模式 (忽略IE = 7的要求!)。 任何已知的解决方法欢迎:)也许不相关的IE11。

上述似乎是由设计特征的副作用,即I帧(我假定帧)或者全部在IE9模式,或全部小于IE9模式。 谁也不能混用IE9与<IE9帧帧,看到MS问题#599022和#635648 。

编辑2:

要注意的是IE11仅支持“IE =边缘”(未IE = 11),并且,使用IE =边缘具有在IE功能显著效果(包括用户代理)。

编辑3:

  • 神奇的流程图解释IE的工作应使用哪种模式IE9
  • IE=edge通过IE8通过对IE11支撑。
  • META标记优先于HTTP报头(其可以用来代替所述元标记的)
  • 有些更对IE10 X-UA兼容信息 。

编辑4:

X-UA-Compatible从微软边缘浏览器中删除。 只有Internet Explorer具有兼容性模式。 请注意,如果您使用的是应用程序在Windows Phone 10中的WebView,那么你还在使用IE11(不EDGE)。

也用于各种原因你不能信任用户代理,告诉你正确的兼容级别,而是使用document.documentMode从JavaScript。



Answer 2:

有人提到的双模否则应该工作(但不作为微软所示 ),并为我MS文档中看到的最接近的描述,应该工作。 有低于更新显示了适当形式的元属性值应该采取。

所以,如果你使用:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7; IE=EmulateIE9">

不幸的是,你将得到的是IE8渲染为IE8,因为模糊矢量版本的X-UA兼容的引擎做的。 看到这个文件: 定义文档兼容性:了解内容属性值 MSDN上。 在这一节中,你会看到,在今年上半年,他们定义定义为比当前的浏览器版本更大的任何版本矢量将被解释为最大可用渲染引擎。 因此,emulateIE9得到的转换到emulateIE8。 笨。

然后,在呼气的同时实际上,他们谈论使用多个版本的向量作为在上面的代码中排除特定引擎的代码。 但由于模糊逻辑的版本,那永远不会成功。 嗯,微软。 再次失败。

为什么使用周围的元本社将不工作的原因,是浏览器必须由它击中一个CC的时间选择了一个渲染引擎。 在X-UA元必须拿出东西在头别的除了其他METAS或根据MS自己的文档标题之前。

如果任何人都可以算出来,我所有的耳朵,因为我不顾一切地从支持IE8排除包括同时IE9。

重要更新

Robocat指出,使用逗号而不是分号作为项目建立在微软显示的是这样做的正确方法。 我测试了它和它的工作对我来说。 我已经更新了我的测试页 。

所以, 正确的形式是这样的(由robocat的建议):

<meta http-equiv="X-UA-Compatible" content="IE=7, IE=9">

不正确的形式是这样的(由微软的建议):

<meta http-equiv="X-UA-Compatible" content="IE=7; IE=9">


Answer 3:

我迄今所使用的所有这些,实在不行上IE9:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" >
<meta http-equiv="X-UA-Compatible" content="IE=8" >

<httpProtocol>
        <customHeaders>
          <clear />
          <add name="X-UA-Compatible" value="IE=EmulateIE8" />
        </customHeaders>
    </httpProtocol>

这是如此令人沮丧,没有这些meta标签的似乎是工作。 微软,是什么支持你说你的文档中应该工作的东西这么难? 我们必须花时间做的浏览器大战。 你是在浪费大家的时间。



Answer 4:

如果您希望IE 8使用IE7标准和IE 9使用IE9标准,对我来说这一个工作:

<meta http-equiv="X-UA-Compatible" content="IE=7, IE=9">

对于IE9这给了我IE浏览器IE 9 9标准兼容模式。 对于IE8这给了我浏览器IE8模式文档模式IE7标准



Answer 5:

这一个适用于IE9给我。

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8"/>


Answer 6:

我想你需要的是:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7; IE=EmulateIE9">

根据http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for-site-developers.aspx ,因为它指出这是” ...的例子结合值,使得IE8呈现在IE7标准模式的网页,而IE9呈现在IE9的标准模式的网页:”

不过,我对一个不能得到这个工作。



Answer 7:

哇微软确实创造了一个噩梦在这里。 我们将要谈论这个到未来!

反正这对我的作品。

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7; IE=EmulateIE9" />


Answer 8:

<!--[if IE 8]>
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<![endif]-->

这就是所谓的条件注释
http://en.wikipedia.org/wiki/Conditional_comment



文章来源: Emulate IE7 for IE8 but not for IE9 using “X-UA-Compatible”