PHP:检测不到IE9并忽略文档和浏览器模式

时间:2013-06-17 15:38:37

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

/*------------------------------------*\
    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的方法,而不是模拟的浏览器。

3 个答案:

答案 0 :(得分:1)

您可以禁用兼容模式:

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

或者在HTML源代码中:

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

答案 1 :(得分:0)

我发现了我遇到的问题。

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

我将respond.min.js的加载移动到页面上调用的最后一个脚本(在页脚中),它没有任何问题(或闪烁,因为开发人员认为会发生)。

答案 2 :(得分:0)

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

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

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

简而言之,你所要求的基本上无法完成。

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