Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于intranet站点的IE9兼容模式具有错误的用户代理字符串_Javascript_Jquery_Internet Explorer_View_Compatibility - Fatal编程技术网

Javascript 用于intranet站点的IE9兼容模式具有错误的用户代理字符串

Javascript 用于intranet站点的IE9兼容模式具有错误的用户代理字符串,javascript,jquery,internet-explorer,view,compatibility,Javascript,Jquery,Internet Explorer,View,Compatibility,我正在一个大项目中工作,我们必须确定用户是否正在使用IE中的兼容性视图。 我用这个代码来做这个 var agentStr = navigator.userAgent; var mode = null; if (agentStr.indexOf("Trident/5.0") > -1) { if (agentStr.indexOf("MSIE 7.0") > -1) mode = "IE9CV"; else mode = "IE9"; }

我正在一个大项目中工作,我们必须确定用户是否正在使用IE中的兼容性视图。
我用这个代码来做这个

var agentStr = navigator.userAgent;
var mode = null;
if (agentStr.indexOf("Trident/5.0") > -1) {
    if (agentStr.indexOf("MSIE 7.0") > -1)
        mode = "IE9CV";
    else
        mode = "IE9";
} else if (agentStr.indexOf("Trident/4.0") > -1) {
    if (agentStr.indexOf("MSIE 7.0") > -1)
        mode = "IE8CV";
    else
        mode = "IE8";
} else
    mode = "IE7";
它工作得很好,问题是:
1-在INTRANET环境中,在客户端浏览器中选中“在兼容性视图中显示INTRANET站点”选项,对此我无能为力

2-脚本检测兼容性视图不会有问题,但我不知道为什么,如果页面加载到IE 9兼容性视图上,我收到的用户代理就是下面这个

Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
如果页面加载了IE9

Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
而我应该接受

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
用于IE9兼容性视图。
当我强制IE9兼容性视图(如预期)时,我得到了最后一个结果,但当它自己加载时,我得到的用户代理与IE9标准发送给我的是相同的。因此,我无法找到一种方法来确定用户是否拥有IE9标准视图或兼容性视图

我不知道我是否说得很清楚,但它看起来像一个大的IE bug。
我应该如何进行?有没有人也遇到过这个问题

这是模拟以下情况的屏幕:

几乎在任何地方,兼容模式都是一个难题!:)

但是,尽量不要检测浏览器代理,因为它很容易被愚弄并且通常不可靠,而应尝试“功能检测”

有一些图书馆可以用来做这件事

编辑:如果您的要求是阻止用户访问启用了兼容性视图的站点,则可以使用
标记/HTTP标题。
禁用该模式。有关更多信息,请参见此处


非常奇怪。。。您确定它实际上是在兼容模式下显示的,并且选中了“显示intranet站点”吗?因为你是对的,它应该显示
msie7.0;三叉戟/5.0用于IE9 Comp模式。只是问,因为如果UAgent正在显示,可能它实际上并没有处于Comp模式。请检查我的上次编辑。。。我添加了一个模拟情况的图像,我得到的响应=/@Christoph这不是重复的,而是一个不同的问题。我最近一直在处理兼容性问题,我甚至不知道这个问题。您是否尝试过与Microsoft联系,看看他们是否对这个奇怪的问题有任何建议?我觉得除非UAString是正确的,否则我不知道你怎么知道它是否真的在兼容模式下我很震惊版主们根本没有读过整篇文章,甚至没有试着去理解它。每当人们这样做时,社区就会失去知识和共同解决问题的能力。这不是重复。我会试着重新打开它。我甚至更改了标题。找到答案了吗?我一直在找,也找不到任何东西!我知道你的意思,这将是一个完美的解决方案,但分析师要求我检测兼容模式,并在用户启用了兼容视图时阻止访问。我已经在使用标签将浏览器设置为IE9:问题是兼容视图设置(在Intranet上)覆盖浏览器模式下的行为。外部用户的行为将符合预期,但内部(intranet)客户端将在启用兼容性视图的情况下进入页面,即使我使用meta标记。好的,我不想进行大讨论,因为我自己从未尝试过,但我发送的链接说,标签/标题的存在表明该站点已经更新以支持IE8,其价值“赢得”了客户端上任何模式兼容性视图的支持。你说得对,伙计,我还有一些文件说。。。但事实证明,IE的表现与它应有的正好相反(多亏了微软)。当我取消选中“在兼容性视图中显示intranet站点”时,它们遵守META标记并按预期运行,但看起来兼容性视图设置覆盖了META标记=/