前几天作项目的时候, 发现透明的Png文件在IE 6下显示的很糟糕,如是,通过google, 发现这个方法是目前最好使用的方法.
- 判断当前浏览器
如果浏览器不是IE 6, 则处理无效.
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1
var itsAllGood;
2![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
if (navigator.platform == "Win32" && navigator.appName == "Microsoft Internet Explorer" && window.attachEvent)
{
3
var rslt = navigator.appVersion.match(/MSIE (\d+\.\d+)/, '');
4
itsAllGood = (rslt != null && Number(rslt[1]) >= 5.5 && Number(rslt[1]) < 7);
5
if(itsAllGood)
6![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
7
document.writeln('<style type="text/css">img, input.image { visibility:hidden; } </style>');
8
window.attachEvent("onload", fnLoadPngs);
9
}
10
}
2 全局处理函数
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1
function fnLoadPngs()
2![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
3
for (var i = document.images.length - 1, img = null; (img = document.images[i]); i--)
4![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
5
if (img.src.match(/\.png$/i) != null)
6![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
7
fnFixPng(img);
8
img.attachEvent("onpropertychange", fnPropertyChanged);
9
}
10
img.style.visibility = "visible";
11
}
12![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
var nl = document.getElementsByTagName("INPUT");
14
for (var i = nl.length - 1, e = null; (e = nl[i]); i--)
15![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
16
if (e.type && e.type.match(/\bimage\b/i) != null)
17![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
18
if (e.src.match(/\.png$/i) != null)
19![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
20
fnFixPng(e);
21
e.attachEvent("onpropertychange", fnPropertyChanged);
22
}
23
e.style.visibility = "visible";
24
}
25
}
26
}
27![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
28
function fnPropertyChanged()
29![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
30
if (window.event.propertyName == "src")
31![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
32
var el = window.event.srcElement;
33
if (!el.src.match(/x\.gif$/i))
34![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
35
el.filters.item(0).src = el.src;
36
el.src = "../images/pngfix.gif";
37
}
38
}
39
}
3 单个文件处理
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
function fnFixPng(img)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
var src = img.src;
if(img.width != 0)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
img.style.width = img.width + "px";
img.style.height = img.height + "px";
}
img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='scale')"
img.src = "../images/pngfix.gif";
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
function fixPNG(img, register)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
if (itsAllGood && img.src.match(/\.png$/i) != null)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
var src = img.src;
if(src.indexOf("empty") == -1)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
fnFixPng(img);
if(register == "true")
img.attachEvent("onpropertychange", fnPropertyChanged);
}
img.src = "../images/pngfix.gif";
img.border = 0;
}
img.style.visibility = "visible";
}