【问题标题】:PHP: Detect less than IE9 and ignore document and browser modePHP:检测低于 IE9 并忽略文档和浏览器模式
【发布时间】:2013-06-17 15:38:37
【问题描述】:
/*------------------------------------*\
    FIXES (IE ONLY)
\*------------------------------------*/

if( preg_match( '/MSIE ([0-8].[0-9]{1,2})/', $_SERVER['HTTP_USER_AGENT'] ) ) {
    wp_enqueue_script( 'respond', ( get_template_directory_uri() . '/assets/scripts/respond.min.js' ), false );
    wp_enqueue_script( 'html5shiv', ( get_template_directory_uri() . '/assets/scripts/html5shiv.js' ), false );
    wp_enqueue_script( 'selectivizr', ( get_template_directory_uri() . '/assets/scripts/selectivizr-min.js' ), array( 'jquery' ) );
}

我目前在WordPress中使用上面的代码来检测IE9下的IE。我这样做是因为即使 HTTP_USER_AGENT 是伪造的并且它们出现,它也不会破坏正常的浏览器行为,所以没有必要。

我需要一种方法(在 PHP 中)来检测浏览器是否处于兼容模式(浏览器和文档模式 IE8(或更低))。

http://dev.netcoding.net/sustain/

如果您在真正的 IE8 浏览器中测试该站点,respond.min.js 工作得非常好。但是在 IE9-10 中通过同时更改浏览器和文档模式来模拟 IE8 时,会导致选项卡崩溃。

我需要一种方法,只在它是真正的 IE8 浏览器而不是模拟浏览器时添加 respond.min.js

【问题讨论】:

  • 请注意,您的正则表达式将匹配MSIE 100,如果我们能走到那一步!这是因为. 匹配任何字符,因为你没有转义它。
  • 感谢您的提醒,我将把它写在我 50 年的待办事项中。 :)
  • 小心浏览器检测。这几乎总是一个坏主意。

标签: php internet-explorer-8 media-queries


【解决方案1】:

你可以禁用兼容模式:

header("X-UA-Compatible: IE=edge");

或者在 HTML 源代码中:

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

【讨论】:

  • 我的网站已经添加了该标题。它不会阻止个人在 F12 开发者工具中手动更改文档模式。
  • 如果他们选择通过故意使用此类功能来手动破坏您的网站,那么我建议给予他们与主动禁用 JavaScript 的用户相同的待遇:“去你的,我不是在浪费时间因为你选择让我的生活变得困难”
  • @BrianGraham 如果用户有意更改 developer 设置,何必费心呢?
【解决方案2】:

从服务器端检测兼容模式是绝对不可能的。您唯一可用的信息是用户代理字符串,它在 IE7 的真实副本和 IE7 兼容模式(或您碰巧谈论的任何 IE 版本)之间是相同的。

此外,由于您指定您特别希望与使用开发工具更改模式的人打交道,因此您还将知道开发工具中有两个下拉框来设置模式:一个其中一个更改渲染模式,另一个更改 UA 字符串。这意味着,如果您正在与手动设置模式的人打交道,那么您甚至无法确定 UA 字符串报告的渲染模式与用户实际使用的渲染模式相同。

有一些技术可以帮助您在客户端上用 Javascript 计算模式,但即使这些技术也并不总是可靠的。

简而言之,你要求的基本上是做不到的。

但是,我认为不应该这样做。使用X-UA-Compatible 标志设置模式,并保留它;手动更改模式的用户应该期望站点在这样做时会中断。无论如何,这不完全是普通用户浏览行为的一部分,所以我真的不用担心。

【讨论】:

    【解决方案3】:

    我发现了我遇到的问题。

    html5shiv 和/或selectivizr 在页面加载期间的某个时间点干扰respond

    我将 respond.min.js 的加载移动到页面上调用的最后一个脚本(在页脚中),并且它可以正常工作(或闪烁,正如开发人员假设的那样)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      • 1970-01-01
      • 2015-11-24
      • 2015-01-15
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多