Css 数据uri:s的MSHTML回退

Css 数据uri:s的MSHTML回退,css,internet-explorer-7,mshtml,data-uri,Css,Internet Explorer 7,Mshtml,Data Uri,我的站点使用数据uri:s来减少对我的站点的HTTP请求数。问题是数据uri:s在IE7中不起作用,我们必须支持IE7浏览器(不,我们不需要IE6)。我遵循了这一点,并实际使其发挥了作用,但在最近的Microsoft安全更新(KB2544893,如a中所述)之后,该后备方案似乎已经停止工作 上面提到的评论建议我应该尝试发送内容类型为message/rfc822的MSHTML文件,但我也无法实现这一点,我在几个小时的时间里尝试了多种不同的方法 所以我的问题是:你能让斯托扬描述的技术以某种方式发挥作

我的站点使用数据uri:s来减少对我的站点的HTTP请求数。问题是数据uri:s在IE7中不起作用,我们必须支持IE7浏览器(不,我们不需要IE6)。我遵循了这一点,并实际使其发挥了作用,但在最近的Microsoft安全更新(KB2544893,如a中所述)之后,该后备方案似乎已经停止工作

上面提到的评论建议我应该尝试发送内容类型为message/rfc822的MSHTML文件,但我也无法实现这一点,我在几个小时的时间里尝试了多种不同的方法


所以我的问题是:你能让斯托扬描述的技术以某种方式发挥作用吗?我非常希望有一个工作示例能让我相信这确实是可能的。

就我个人而言,我会使用条件样式。在主标记中,按如下方式启动它:

<!DOCTYPE html>
<!--[if IE 7]>    <html lang="en-us" class="ie7"> <![endif]-->
<!--[if IE 8]>    <html lang="en-us" class="ie8"> <![endif]-->
<!--[if gt IE 8]><!--> <html lang="en-us"> <!--<![endif]-->

更新

除了下面的评论,如果你对IE7的性能感到担忧,一个可靠的方法就是让你的IE7

这样,您只需为IE7用户再进行一次HTTP调用:

.ie7 .myClass {
      background-image: url(fallback-sprite.png);
      background-position: 150px 15px;
}

这是您的解决方案,我想

我与斯托扬·斯特凡诺夫(该技术的原始作者)联系过,他修复了他的原始示例,因此它现在可以工作了。只需添加“message/rfc822”作为内容类型即可

固定示例:


我请他在这里发表评论,这样我就可以奖励分数了,但他不想这样做。

这意味着速度最慢的浏览器IE7,不会从这种优化中获得任何好处。根据IE7的使用统计数据,我想说的是,开发/维护成本降低所带来的好处超过了IE7用户体验性能降低的成本。我们销售服务,声称符合IE7,IE7用户约占5%。我们每月有大约20000个用户,这意味着1000个用户将拥有IE7。我在这里要求的是一种方法,可以帮助这1000名用户获得更好的体验。我得到了IE7合规性——通过使用映像回退,您已经做到了。然而,你不能让IE7变得不一样:我的意思是,即使你让数据URI与某种黑客一起工作——你的IE7用户仍然会因为其低于标准的渲染功能和JavaScript引擎而有更差的性能——你不能交换这些,所以你不能真正实现你想要的。如果你真的担心IE7的性能-使用一个sprite映像,这意味着IE7用户只需要额外的一个HTTP请求(我已经更新了我的答案,包括这个)。我们已经考虑了sprite映像。它们的问题是,它们是一个需要维护的噩梦。“-你能把那个图标放大一点吗?”,“-是的,我会重建整个精灵。”。我可能会退回到单个图像或精灵,但在我知道MSHTML技术是不可能的之前。它提供了与数据URI相同的性能特征,使用了相同的基本思想(base64编码),这使得它易于维护。否。我在问题中链接到的那篇文章是你链接到的那篇文章的后续文章。在IE7中尝试这个演示,你会发现它不起作用。你能确认你正在运行哪个web服务器吗?另外,您能否确认您提供的文件扩展名是.mht而不是.css?如果有人能够在任何Web服务器上以任何方式使用此方法,我会很高兴。如果我有一个工作版本,我可以很容易地插入到我自己的设置中(即nginx/Django)。是的,我尝试将文件类型设置为.mht,但没有成功。因此,如果您使用该扩展名。。。您是否可以在Firefox或Chrome开发工具中打开Firebug,并确认HTTP头中返回了什么内容以请求“yourfile.mht”?-如果它说Content-Type:message/rfc822,那么您就有明确的证据证明它不起作用。正如你所做的,这篇文章中提到的每一件事。这个问题是关于找到一个有知识的人,他会尝试一些事情,并确认它是否有效。我知道它在我的设置中已经不起作用了。唯一有文档记录的解决方案(我可以在谷歌上找到)就是你链接到的那个。2.该解决方案要求您确保响应头“Content Type”显示“message/rfc822”-是吗?3.文章还指出,您应该使用“mht”文件扩展名,您已经说过了。4.如果同时遵循2和3,则没有其他记录在案的解决方案可用,因此不起作用。更重要的是,任何web开发人员都会告诉你,这是一个糟糕的、不合规的“解决方案/黑客”,即使它确实有效(即,被windows更新破坏的东西)。斯托扬,那个人!//然而,这并没有消除我关于一般使用这种黑客的观点。
.ie7 .myClass {
      background-image: url(fallback-image.png);
}
.ie7 .myClass {
      background-image: url(fallback-sprite.png);
      background-position: 150px 15px;
}