【问题标题】:jqGrid and Compatibility View mode in IE8IE8中的jqGrid和兼容性视图模式
【发布时间】:2011-03-10 16:35:45
【问题描述】:

在我的上一个项目中,我使用了 jqGrid 3.8.2、jQuery 1.4.4 和 jquery-ui-1.8.10。 我工作的公司仍然使用 IE8 作为网络浏览器,所以在我的开发过程中,我总是使用该平台进行测试。 我今天注意到,当我使用 Visual Studio (2010) ASP.NET 开发服务器测试我的机器 (winXP) 上的所有内容时,会正确呈现 jqGrid:

正如你所看到的,选择是完美的,标题是好的。

当我复制生产服务器(Win 2003 + IIS6.0)上的所有内容时,相同的表单以一种有趣的方式呈现。

正如您现在所看到的,行选择无法正常工作,并且我在标题中出现了这些奇怪的箭头。 PS:我使用同一台电脑和浏览器来渲染同一个页面。 PPS:显然,如果我使用不同的(专业的;-))浏览器(mozilla、safari、opera、chrome),一切都会正常工作。

【问题讨论】:

  • 它是否与为您的页面提供服务的服务器有关? (AKA,使用 Firebug/ChromDevTools 等工具查看开发环境和生产服务器的生成输出 - 确保它们匹配。)
  • @JasCav,我检查了输出,结果完全一样。相同的内容等等等。我还应该去哪里看? PS:我正在使用萤火虫,但使用 FF 一切看起来都很好。
  • 您是否尝试过使用 IE8 的开发者工具栏查看它?
  • 我想我找到了问题所在。我将发布带有扩展答案的回复。
  • 太棒了!期待看到答案,因为我是 jqGrid 的常客,以前从未见过这个问题。

标签: jquery internet-explorer jqgrid ie8-compatibility-mode


【解决方案1】:

出于某种奇怪的原因,IE8 为所有 Intranet 站点设置了“兼容性视图”:

所以我看不到网址栏旁边的“兼容性视图”按钮。
我必须转到工具 - 兼容性视图设置并取消选中“在兼容性视图中显示 Intranet 站点”标志。
没有我的网站(Intranet 网站)以标准模式显示,一切正常。
感谢微软,再次感谢您的愚蠢,我已经浪费了几个小时。

更新

按照 Oleg 的建议,您可以将这些标签添加到您的配置文件(ASP.NET 和 MVC)中:

<system.webServer>
      <httpProtocol>
      <customHeaders>
        <clear />
        <add name="X-UA-Compatible" value="IE=8" />
      </customHeaders>
    </httpProtocol>
    ...
</system.webServer>

但这仅适用于 IIS7,因为 IIS6 不使用 &lt;system.webServer&gt;
实现相同结果的更好方法 - 它对我有用 - 是在 HEAD 部分的母版页中放置一个 META 标记:

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

我已经对其进行了测试,即使您启用了“在兼容性视图中显示 Intranet 站点”,它也能正常工作。

【讨论】:

  • +1 获取非常有趣的信息。可能我必须考虑将“X-UA-Compatible”与“IE=edge”或“IE=8”或“IE=9;IE=8;”一起使用在母版页中就有这样的问题。可能&lt;configuration&gt;&lt;system.webServer&gt;&lt;httpProtocol&gt;&lt;customHeaders&gt;&lt;clear /&gt;&lt;add name="X-UA-Compatible" value="IE=7" /&gt; 的方式会更好(参见here)。无论如何,我会更仔细地查看设置。
  • 这很有趣,奥列格。我不知道。
  • @LeftyX:我昨天做了一些测试,可以找到一个示例,其中在 web.config 中设置 "X-UA-Compatible" value="IE=8" 并使用“在兼容性视图中显示 Intranet 站点”给我不一样的结果 清除“在兼容性视图中显示 Intranet 站点”。我看到 web.config 中的 "X-UA-Compatible" value="IE=8" 有效,但它确实 less 然后清除了“在兼容性视图中显示 Intranet 站点”。因此,请注意 Microsoft 撰写的有关“兼容性视图”管理的不同方式的信息。
  • 谢谢奥列格,你真的很有帮助。实际上我需要解决这个问题,因为我无法告诉 IT 经理他必须更改 80 个客户端的设置:-s
  • @LeftyX:在我看来,我喜欢“在兼容性视图中显示 Intranet 站点”与用法 "X-UA-Compatible"&lt;add name="X-UA-Compatible" value="..." /&gt; 之间的区别。如果您使用“在兼容性视图中显示 Intranet 站点”,您将同时拥有 $.browser.version="8.0" 和 document.documentMode=8 或同时拥有“7.0”和 7。如果使用“X-UA-Compatible”强制 IE8 模式,但您仍处于“兼容性视图”模式,然后是 $.browser.version="7.0",但 document.documentMode=8。在我的代码中,我测试了$.browser.version。现在我也测试 document.documentMode。
【解决方案2】:

它看起来更像是部署中的错误。我的意思是某些文件(例如来自 jQuery UI 的 images 子目录)没有被复制或复制,或者您在某处使用绝对路径而不是相对路径。所以在服务器上部署后有些文件找不到了。

您可以尝试使用FiddlerFirebug 来查看在页面加载过程中哪些文件无法加载。

【讨论】:

  • 同样的问题出现在我身上,我无法在网格中加载数据,当单击兼容性图标时,它只会显示数据。我正在使用 IE9 来显示网格。它适用于 IE8 和更早版本的 IE。
  • @BhavikAmbani:写完答案后,我给the answer写了一些cmets。我个人在所有生产页面上使用"X-UA-Compatible""IE=edge" 模式。你试过用这个吗?你还有问题还是你的问题已经解决了?如果您需要我的帮助,您应该准备一个演示,该演示可用于重现问题并将其发布在新答案中。然后我可以分析问题并可能给你一些建议。
  • 我不能这样做,因为它将用于最终客户端,我不能对客户端说使您的 IE 兼容。还有一件事是我的问题是我不能仅在IE9中将JSON数据加载到Grid中,但是当我与以前的版本兼容时,只会显示数据。
  • @BhavikAmbani:如果您将元“X-UA-Compatible”与“IE=edge”一起使用,您将从兼容性视图切换到原生 IE9 模式仅适用于页面。几乎与使用 &lt;!DOCTYPE&gt; 定义您需要 Web 浏览器将页面呈现为 HTML 4 或 HTML5 页面相同。因此,如果您在页面上使用的不是 HTML5,您只需在页面开头包含 &lt;meta http-equiv="X-UA-Compatible" content="IE=edge" /&gt; 即可解决兼容模式问题。
  • @BhavikAmbani:看看here。我只从您那里知道,如果您关闭页面的兼容性视图,该页面将正确显示。如果包含meta IE 将在页面加载时直接以模式显示页面。
猜你喜欢
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 2013-07-11
相关资源
最近更新 更多