我打算在CMS的标题中放置一些代码,提醒使用ie8及以下版本的用户,建议他们升级浏览器。
在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'])
应该能够区分浏览器。然而,我注意到,当我运行跨浏览器测试时,ie8和UP都返回了相同的结果$_SERVER['HTTP_USER_AGENT'])
,这是:
Mozilla/4.0(兼容;MSIE 8.0;Windows NT 6.1;三叉戟/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创建的横幅&11 .
您不应该依赖用户代理字符串,因为它可能被用户欺骗。特别是因为您已经使用<!--[if lte IE 8]>
,这将只显示在IE <= 8
上。我将完全摆脱PHP条件
好吧…即使那不起作用……难道"怪癖模式"的条件评论不是作为只显示图片和链接到IE8及以下版本的退路吗?我在这里错过了什么?
你似乎有一个错误的印象,条件注释只在怪癖模式下工作。它们不受这样的限制;无论使用的是哪种文档模式,IE 9之前都将尊重它们,而从版本10开始的IE以及所有其他浏览器将完全忽略它们,就像任何常规的HTML注释一样。
如前所述,服务器端检查是完全没有必要的,由于UA欺骗的可能性,甚至可以破坏内容,因此应该删除它。<div>
, <a>
和<img>
的出现让我认为这是位于页面的body
。<!--[if lte IE 8]>
应该在head
.
如果你想隐藏div
,那么默认设置为display:none;
,然后使用<!--[if lte IE 8]>
和style
将其设置为display:block
(或您选择的任何其他显示方法),只有在使用IE8或更少的时候。