/*------------------------------------*\
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
的方法,而不是模拟的浏览器。
答案 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
标志设置模式,并将其保留;手动更改模式的用户应该期望网站在他们这样做时中断。无论如何,这并不是普通用户浏览行为的一部分,所以我真的不担心。