【问题标题】:IE 11 - Is there a way to check then enable / disable enterprise mode?IE 11 - 有没有办法检查然后启用/禁用企业模式?
【发布时间】:2015-04-09 19:02:33
【问题描述】:

我不知道如何在 Javascript 或 HTML 中解决这个问题。我有客户目前使用为 ie9 及以下构建的 Web 应用程序。这些遗留应用程序在 IE11 上无法正常运行。 IT解决方案是启用企业模式。企业模式旨在避免“与在旧版本 Internet Explorer 上编写和测试的 Web 应用程序相关的常见兼容性问题”。

见:http://www.eightforums.com/tutorials/43972-ie11-enterprise-mode-enable-disable-users.html

在使用 Bootstrap 和 AngularJS 编写的 Web 应用程序上启用企业模式似乎存在问题。即,除非禁用企业模式,否则响应式根本不起作用。不仅是 AngularJS 和 Bootstrap,还有其他库。

我正在寻找的解决方案是一种通过 javascript 检查企业模式状态的方法,然后告诉用户启用/禁用该模式。更好的是,如果它可以通过 JS 或 HTML 属性自动关闭/打开。

在 document.x 和 window.x 对象中窥探,我没有看到任何属性,我们可以告诉我企业模式已启用。有什么建议吗?

复制:

  • IE11 > 开发者工具 > 控制台 > 输入窗口
  • IE11>开发者工具>控制台>输入文档

【问题讨论】:

  • 如果企业模式类似于兼容模式,您应该能够根据特定版本号检查document.documentMode
  • 听起来你在寻找X-UA-Compatible 元标记。设置它不需要用户端的任何操作,并允许您的页面指定它应该呈现的文档模式,而不管浏览器默认值如何。
  • @Waxen 我认为 IE 设置可以覆盖该标签。
  • @user1620220 我不知道“企业模式”,但元标记肯定会取代已经存在了一段时间的“以兼容模式显示 Intranet 站点”设置。 X-UA-Compatible 标签的全部意义在于让开发人员能够指定文档模式,期望浏览器默认比网站自己的开发人员更了解是愚蠢的。但话又说回来,我永远不会停止对 IE 团队多年来做出的愚蠢决定感到惊讶。

标签: internet-explorer-11


【解决方案1】:

没有表明您正在运行 EMIE 的 DOM 属性。 EMIE 的整个想法是emulate IE8 behavior 比 IE8 文档模式更好地模拟 IE8 行为。 EMIE 只应在需要的特定情况下使用;它不应该被批发使用。

在某些情况下可以检测 EMIE。如果您仔细查看最近几个版本中的user-agent strings 列表,就会发现 IE11 上的 EMIE 和 IE11 RTM 的用户代理字符串之间存在显着差异。

但是,在你把它当作你的灵丹妙药之前,有两个警告:

  1. 您不能以编程方式禁用 EMIE。仅限local configuration change

  2. 今天的 IE11 用户代理与 IE11 发布时完全不同。根据 IE 团队的报告,UA 字符串甚至会是 more complicated,尤其是一旦“IE Spartan”(或他们选择的任何名称)出现问题。

我的建议?创建一个小型启动器页面,为相关 Web 应用程序执行简单的功能检测。如果您检测到与应用程序所需的功能一致的功能,则显示一个链接以启动应用程序。如果功能检测无法检测到 IE8、IE11 或您所针对的任何版本,则显示一条警告,其中包含指向更多故障排除信息的链接。一定要包含一个启动链接,以防万一。

通过这种方式,用户可以获得他们需要的信息,并且您可以通过一种轻量级的方式来处理问题,这种方式不需要对相关应用进行太多更新。

希望这会有所帮助...

-- 兰斯

【讨论】:

  • 感谢您的建议。您指出了正确的道路。
  • 我的主应用程序中有一个子应用程序,它在弹出窗口中打开。不知何故,我的子应用程序以企业模式打开,我遇到了 UI 问题。任何想法/建议为什么它在企业模式下打开?
【解决方案2】:

在我看来,问题的原因是 IE 11 企业模式模拟 IE 8。但引导程序不支持 IE 8。要克服它,只需使用 HTML5 shim 和 Respond.js,如 here 所述。

<script src="js/respond.min.js"></script>
<script src="js/html5shiv.min.js"></script> 

但是没有检查像&lt;!--[if lt IE 9]&gt; - 因为它似乎在企业模式下不起作用。

更好的解决方案不仅是不带条件地包含提到的脚本,而是找出适当的条件而不是

要解决 angularjs 的问题,只需使用以下元标记:

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

【讨论】:

  • 或者使用Modernizr有条件地加载respond.min.js和html5shiv.min.js
  • 或者只是将企业模式设置为 IE 9 或 IE 10 而不是 IE 8。或者重新编写您的网站以使用 IE 11。
【解决方案3】:

对于那些同样在这个问题上苦苦挣扎的人。我已向 MS IE 团队提交了功能请求。

见: https://connect.microsoft.com/IE/feedback/details/1159543/need-a-way-for-client-side-codes-to-detect-enterprises-mode

我的解决方案是一种涉及检查容器 div 宽度的解决方法。企业模式不支持响应式。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-05-07
  • 2016-01-26
  • 2015-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
  • 2020-03-25
相关资源
最近更新 更多