我如何识别IE8及以下的帖子唯一的代码


How can I identify IE8 and below to post unique code?

我打算在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或更少的时候。