我打算将一些代码放入我的CMS标题中,该标题会提醒任何使用IE 8及以下版本的用户,建议升级他们的浏览器。
在PHP中,我有以下代码 ,它显示所有版本的IE 。
<?php
if(preg_match('/(?i)msie [1-8]/',$_SERVER['HTTP_USER_AGENT'])) {
// if IE<=8
?>
<!--[if lte IE 8]>
<div class="ieNotice">
<a href="http://windows.microsoft.com/en-us/internet-explorer/" target="_blank">
<img src="/skin/frontend/default/hellowired/images/ieUpgrade.jpg">
</a>
</div>
<style>
.ieNotice {
background-color: #eee;
padding: 10px;
}
</style>
<![endif]-->
<?php
}
?>
这应该是两倍的工作。一,$_SERVER['HTTP_USER_AGENT'])
应该能够告诉浏览器。但是,我注意到当我运行跨浏览器测试时,IE 8和UP将返回$_SERVER['HTTP_USER_AGENT'])
的相同结果,即:
Mozilla / 4.0(兼容; MSIE 8.0; Windows NT 6.1; Trident / 4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0 )
好的......即使那不起作用......“怪癖模式”条件评论不会作为后备只显示图像并链接到IE8及以下? 我在这里缺少什么?
好的,所以我按照指示完成了。我删除了PHP代码,并将.ieNotice
类放在display: none
属性中。现在,在此处包含的样式表中:
<!--[if lte IE 8]>
<link rel="stylesheet" type="text/css" href="/skin/frontend/default/hellowired/css/styles-ie-lte8.css" media="all" />
<![endif]-->
我添加了以下行:
.ieNotice { display: block !important;}
我已经在Firefox和Chrome上正确地看到了这项工作,但它仍然显示我为IE 9,10&amp; 11。
答案 0 :(得分:5)
您不应该依赖可能被用户欺骗的用户代理字符串。特别是因为您已经使用了<!--[if lte IE 8]>
,这只会出现在IE <= 8
上。我完全摆脱了PHP的条件。
答案 1 :(得分:1)
好的......即使那不起作用......“怪癖模式”条件评论不会作为后备只显示图像并链接到IE8及以下? 我在这里缺少什么?
您似乎错误地认为条件评论仅适用于怪癖模式。它们不受此限制;无论使用哪种文档模式,IE及版本9都将遵循它们,从版本10开始的IE以及其他浏览器将完全忽略它们,就像任何常规HTML注释一样。
如上所述,服务器端检查是完全没必要的,甚至可以打破因为UA欺骗的可能性,所以应该将其删除。您的条件评论将按设计自行运作。
答案 2 :(得分:1)
<div>
,<a>
和<img>
的外观让我觉得它位于页面的body
。 <!--[if lte IE 8]>
应位于head
。
如果您要隐藏div
,请默认设置为display:none;
,然后使用<!--[if lte IE 8]>
和style
将其设为display:block
(或任何只有在使用IE8或更低版本时,您选择的其他显示方法。