1
/*------------------------------------*\
    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 时,会导致选项卡崩溃。

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

4

3 回答 3

1

您可以禁用兼容模式:

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

或者在 HTML 源代码中:

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
于 2013-06-17T15:42:07.520 回答
0

我发现了我遇到的问题。

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

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

于 2013-06-17T15:51:32.277 回答
0

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

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

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

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

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

于 2013-06-17T16:13:03.647 回答