【问题标题】:What is best way to hide all content from IE8 users向 IE8 用户隐藏所有内容的最佳方法是什么
【发布时间】:2015-04-23 10:36:05
【问题描述】:

所以我知道我实际上可以在我的所有帖子和其他内容上使用display:none;

这样做的问题是您无论如何都可以看到源代码中的内容(很确定 99.9999% 的 IE8 用户甚至不知道源代码选项,但无论如何都想从源代码中隐藏它...... )。 我想做的是根本不获取任何代码,除了可能在页面和源代码中显示类似的内容:

<!--[if lte IE 8]>
    <h2>You should update your browser version or choose another. Otherwise the content will not be visible for Internet Explorer users or below.<h2>
<![endif]-->

(这是一个 WordPress 网站)

【问题讨论】:

  • 您为什么要这样做?这将需要在后端进行用户代理嗅探。
  • 您是否有特定原因不希望通过源代码看到它?我认为将其隐藏在该级别的唯一原因是安全问题,但拥有 IE8 的用户不值得这样做。
  • 这似乎是一个相当愚蠢的要求。即使您只向 IE8 用户提供了一个空白页面,他们所要做的就是下载 Chrome 或 Firefox 或更新版本的 IE,然后他们就可以看到您的源代码。当前门和侧门大开时,这似乎是您试图三重锁定后门,这几乎是浪费时间。
  • 也许更有效的方法是设计两种体验,一种用于支持您需要的功能的浏览器,另一种用于不支持的浏览器。这将使您能够为旧版浏览器和使用非传统浏览器(例如屏幕阅读器和其他可访问设备)的用户提供体验。

标签: javascript php jquery html wordpress


【解决方案1】:

简短的回答是肯定的,可以做到。

但是对于您所描述的内容,我想说您永远不应该担心人们在您的源代码中看到的内容,除非它是一个安全问题(在这种情况下,它应该对每个人都隐藏起来,对于每种类型可能能够看到它的技术)。表示层对您的访问者来说真的很重要,在这种情况下display:none 就足够了。

【讨论】:

    【解决方案2】:

    在你的主题文件夹的 index.php 中试试这个:

    <?php
    function iever($compare=false, $to=NULL){
        if(!preg_match('/MSIE (.*?);/', $_SERVER['HTTP_USER_AGENT'], $m)
         || preg_match('#Opera#', $_SERVER['HTTP_USER_AGENT']))
            return false === $compare ? false : NULL;
    
        if(false !== $compare
            && in_array($compare, array('<', '>', '<=', '>=', '==', '!=')) 
            && in_array((int)$to, array(5,6,7,8,9,10))){
            return eval('return ('.$m[1].$compare.$to.');');
        }
        else{
            return (int)$m[1];
        }
    }
    
    if(iever('<=', 8)){ 
      <?php include (TEMPLATEPATH . '/shared/header.php' ); ?>
      <!-- YOUR CONTENT -->
      <?php 
        include (TEMPLATEPATH . '/shared/sidebar.php' );
        include (TEMPLATEPATH . '/shared/footer.php' ); 
      ?>
    } else {
      echo("Oh noes. IE8 or below. Maybe");
    }
    

    如果可行,请在评论中告诉我,我会找出要挂钩的操作(也许是 init?),以便可以为每个页面完成。

    我从here得到了浏览器嗅探功能。

    你知道浏览器嗅探很糟糕,对吧?

    【讨论】:

    • 这不安全。一个人可以更改她的用户代理并请求在您的服务器中执行代码。尽量避免使用eval,至少对于用户生成(或可能)的输入。 php.net/manual/en/function.eval.php
    【解决方案3】:

    警告:请谨慎使用上述 Jack Zelig 的答案,因为它在解析用户代理的函数上运行 eval,因此会危及服务器的安全性。可以通过在您的服务器上运行代码来利用用户可以访问的 eval()。

    This question has been answered more thoroughly here:

    if (preg_match('/MSIE\s(?P<v>\d+)/i', @$_SERVER['HTTP_USER_AGENT'], $B) && $B['v'] <= 8) {
        // Browsers IE 8 and below
        // Don't render regular template files to these users
        // e.g.: include 'update-your-browser.php'
    } else {
        // All other browsers
        // Offer a version of the regular site
    }
    

    可以采用其他类似的解决方案: Can I detect IE6 with PHP?

    Sidenote: also, avoid using /e on regular expressions since it will also evaluate any code included on whatever you are parsing.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      相关资源
      最近更新 更多