如何识别IE8及以下版本以发布唯一代码?

时间:2014-06-04 17:37:55

标签: php html regex internet-explorer-8 conditional-comments

我打算将一些代码放入我的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。

3 个答案:

答案 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或更低版本时,您选择的其他显示方法。