0

我正在使用以下代码来修复 IE6 的 PNG 问题(是的,我们确实有一些访问者使用 IE6 :() ... 代码似乎用空白图像替换了 .png 图像,但似乎没有运行过滤器正确...任何想法为什么它可能会失败?谢谢

        var blank = new Image();
         blank.src = 'img/blank.gif';
         $(document).ready(function() {
           var badBrowser = (/MSIE ((5\.5)|6)/.test(navigator.userAgent) && navigator.platform == "Win32");
           if (badBrowser) {
               //alert('bad browser');
             // get all pngs on page
             $('img[src$=".png"]').each(function() {
               if (!this.complete) {
                 this.onload = function() { fixPng(this) };
               } else {
                 fixPng(this);
               }
             });
           }
         });

         function fixPng(png) {
           // get src
           var src = png.src;
           // set width and height
           if (!png.style.width) { png.style.width = $(png).width(); }
           if (!png.style.height) { png.style.height = $(png).height(); }
           // replace by blank image
           png.onload = function() { };
           png.src = blank.src;
           // set filter (display original image)
           png.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "',sizingMethod='scale')";
         }
4

1 回答 1

1

一个可能的实际答案给你,毕竟评论说不要打扰做任何事情:

大多数剩余的 IE6 用户都在由于某种原因无法升级的公司中。

可能无法升级,但他们中的大多数人都清楚 IE6 存在的主要安全问题,并尽可能地降低风险。

减轻 IE6 风险的一项关键措施是禁用浏览器运行 ActiveX,至少对于外部 Internet 上的站点(其内部 Intranet 站点上的 ActiveX 插件通常是它们无法升级的原因之一)。

您会注意到该filter样式使用 ActiveX 来发挥它的魔力。

因此,如果 ActiveX 被禁用,则意味着filter样式将不起作用。这会破坏你的 pngfix。(它还破坏了许多其他东西,包括大多数 Ajax 代码,因此这些用户通常会有非常糟糕的互联网体验)。

值得重申的是,对于关闭 ActiveX 的 IE6 用户,PNG 错误没有其他解决方法。如果您的用户处于这个位置,那么解决它的唯一方法就是回到 2001 年并改用 GIF。

您可以尝试其他一些 png 修复脚本 - 其中有很多,我知道有些比其他的效果更好 - 但在一天结束时,我会回到我原来的评论并建议离开IE6 用户的图形渲染中断。无论如何,他们的互联网体验将被打破,如果一个网站完全可用,那将是一个奖励;一些渲染故障不会让他们失望。

于 2013-01-31T12:40:53.957 回答