HTML   发布时间:2022-04-14  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了html – 从缓存中渲染CSS时IE7回退到IE6标准模式大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个问题,我似乎无法找到解决方案……

我有一个页面可以在初始加载时使用本机IE7(不是IE9 / IE8中模拟的IE7)进行渲染,但是在从浏览器缓存提供的后续请求中回退到IE6标准模式. IE7知道如何处理多个CSS类,如“div.class1.class2”,而IE6标准模式则没有 – 因此我的页面在每次访问时都会中断,但第一次访问.

以下是如何重现它:

>打开IE7(真正的一个,IE9 / IE8的IE7仿真模式将无法正常工作!)
>转到hhttp://beta.upcload.com/widget/popup?garmentId = workaholicfashion-5276777& sid =
>在初次访问时,一切都应该看起来很漂亮(例如蓝色按钮,如Chrome或FF)
>现在重新加载页面,几个CSS规则中断,因为浏览器回退到IE6标准模式(非Quirks模式,我检查了一个!document.compatMode仍然是“CSS1Compat”)
>清除缓存并重新加载,一切看起来都很好
>随心所欲地重复

因此,似乎当所有文件都从亚马逊服务器获得服务时,IE7会将它们渲染得很好,包括包含多个类的CSS规则. (例如“div.class1.class2”)当你尝试使用完全相同的代码重新加载完全相同的页面时,它会以某种方式切换到IE6标准模式(不是Quirks模式),它不能理解链接的CSS类并打破几个设计,例如按钮.
我尝试添加几个不同的Doctype / Meta标题,但它们都没有区别,目前页面是XHTML Strict有效并且具有X-UA兼容的IE = edge标头,但是从缓存加载时仍然无法正确呈现.
我可以解决的标题中唯一的区别是Not Modified请求缺少Content-Type标头,但这应该不是问题,对吧?

哦,最重要的是,当我在我的本地开发服务器上使用IE7打开这个完全相同的页面时,即使重新加载,它也可以正常呈现! :/

更新

好吧,所以我终于能够在开发服务器上重现它了.唯一不同的是“max-age”标头,导致浏览器不在本地缓存任何内容.当我增加缓存时间时,IE7也开始缓存这些文件,一旦从缓存加载,它们再次导致设计中断.
因此,从缓存而不是从服务器提供文件必定存在问题.

更新2

我把它缩小到CSS文件.似乎IE7在从缓存(即没有Content-Type标头)和IE7模式(从服务器加载)时使用IE6模式呈现它. (内容类型:text / css)
有谁知道为什么会这样?也许有些格式错误的CSS规则?
作为一种解决方法,我现在在样式表中添加一个随机参数以防止缓存,从而阻止IE7切换到IE6模式,但即使从样式表中删除所有错误和警告后问题仍然存在.

解决方法

不久前,我在支持传统的IE6应用程序时遇到了完全相反的行为.

无论如何,你使用Xhtml 1.0严格的doctype,那是一个重要的开始!

首先:通常的清单:

>(生成)(X)HTML文件/数据是否在没有BOM的情况下发送/保存,DTD之前没有单个字节?
>您是否检查过发送文件的服务器发送了哪些设置?
>文档内容类型是’text / html’还是XML(‘application / xhtml xml’或’application / xml’)(在markup-source = meta标签中和/或由server = header发送)?
>该页面是否在Microsoft黑名单上的域中提供(或与之通信)
(其中IE fallBACkmode是被禁止的)?
>您是否检查过lan / intRAnet和wan / intERnet之间IE安全设置的差异(因为您提到了不同的行为)?
>是否有可能通过其连接互联网的代理(可能会重写某些内容?)

现在已准备好这些数据并访问我见过的absolute best source on browsermode-switching,事实上每个自我尊重的web-dev书都应该在第一章中介绍.所有这些善良都在一个清晰的页面上,至少可以说是“启发”……
人们应该知道浏览器模式切换有两个部分,并且了解什么时候会发生什么样的行为.
在同一页面上,您还可以找到一个@L_489_3@,它可以深入了解IE所遵循的EXTENSIVE迷宫,以确定它的最终渲染/浏览器模式.

真的希望这有帮助!

更新:
没有IE6(标准/ quirk)模式(在较新版本的IE中).请参阅official microsoft documentation(以及此报价的updated link)!我甚至引用它:

这是他们的doctype-switch检查器的代码(同一页面上的源代码):

ENGIne = null;
if (window.navigator.appName == "Microsoft Internet Explorer")
{
   // This is an IE browser. what mode is the ENGIne in?
   if (document.documentModE) // IE8 or later
      ENGIne = document.documentMode;
   else // IE 5-7
   {
      ENGIne = 5; // Assume quirks mode unless proven otherwise
      if (document.compatModE)
      {
         if (document.compatMode == "CSS1Compat")
            ENGIne = 7; // standards mode
      }
      // There is no test for IE6 standards mode because that mode  
      // was replaced by IE7 standards mode; there is no emulation.
   }
   // the ENGIne variable now contains the document compatibility mode.
}

现在阅读上面微软代码中的评论!!!!

关于您的第二次更新:
关于缓存的好发现!所以css现在是个问题.既然你现在开始理解为什么遗留IE6应用程序需要IE6(IE6难以杀死的原因),也许你应该看看conditional comments.

>他们不是黑客(但正如SDC在评论中指出的那样,Microsoft dropped them从IE10开始和向前)
>没有javascript浏览器嗅探(即使没有脚本需要启用,所以始终有效),
>它可以专门针对(一系列)IE独家版本.

在其中,您可以包含指向IE特定css的链接(保持文档小,精简和整洁)…

大佬总结

以上是大佬教程为你收集整理的html – 从缓存中渲染CSS时IE7回退到IE6标准模式全部内容,希望文章能够帮你解决html – 从缓存中渲染CSS时IE7回退到IE6标准模式所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。