Monthly Archive for 2月, 2009

IE的TR背景bug

最初的想法是想实现tr上加一个背景色,然后td上加一个透明背景图片,但是在IE中的td却无法透明,多出来一个背景颜色,而在其他浏览器中正常。

TR背景IE bug深入分析:

第一个td:通过把td的背景色设为透明,可以发现IE中td的颜色变成红色(此例中为table的颜色,如果table没有指定背景颜色则会向上寻找有背景颜色的祖级,一直到body和html)了,而不是tr的颜色,似乎td的背景直接作用到了tr上,把tr的颜色也给透明了,就像一个滤色镜。

第二个td:通过把无背景的td设置50%的透明度可以发现,在IE中tr的白色背景居然也被透明掉了,似乎tr的背景直接作用到了td上。

解决方法:

网上搜了一下,没找到什么解决bug的方法。。。。
看来,只能转移背景了,把tr的背景色转移到了td上,或者把td上的透明图片转移到tr上。。。。

微软的zoom样式都能被用来挂马

http://www.securityfocus.com/archive/1/500835

The specific flaw exists when processing, in XHTML strict mode, a CSS
stylesheet containing a specific combination of style directives one of
which must be a ‘zoom’. The fault in processing results in a memory
corruption vulnerability which can be leveraged to execute arbitrary
code under the context of the current user.

Internet Explorer处理XHTML strict模式的CSS样式表时存在内存破坏漏洞。如果用户打开的CSS样式表包含有特定的样式指令组合,且其中一个为zoom,就可以触发这个漏洞,导致以当前登录用户的权限执行任意代码。

比较佩服那些搞攻击的,连zoom渲染时的内存漏洞都能发现,并用来攻击,太牛了。

同事正在研究该漏洞,期待中。。。

IE(包括IE7)中的PNG色差问题

大家都知道一个兼容性问题:如果低于IE7版本,不支持PNG的透明通道。

今天我却碰到另外一个PNG兼容性问题,IE7也存在这个问题:PNG色差

过程是这样的:
用PS导出了一张PNG8的图片;
在IE中颜色变了,不是原来的RGB,存在色差,而FF中却没有问题;
如果导出GIF格式就没有色差。

PNG
GIF
(仔细看一下,或用工具取色,上面两张图颜色是不一样的)

浏览器都对PNG重新渲染?
http://www.w3.org/TR/PNG
W3C上对PNG的一些说明,平常我们眼睛所看到的并不是原始的图像,而是在原始图像的基础上根据PNG文件中的color space informationGamma渲染后的图像。
而就是这个再加工的原因,导致IE中的PNG出现色差。
只要把PNG文件中的color space informationGamma删掉就可以了,如下图就是删掉信息后的PNG,不存在色差问题了。


Relationships between source, reference, PNG, and display images


Reference image to PNG image transformation

那为什么有的浏览器有色差问题,有的没有问题呢?浏览器对PNG动了手脚?
只能说是浏览器自己的问题了,在渲染上有所差异,不过没有找到根源。有一个Gamma-Consistency的文章:
Browser Gamma-Consistency Test
http://www.libpng.org/pub/png/colorcube/
也只是做了测试,没说是什么原因。

要避免PNG色差的问题,最好的方法就是删除color space informationGamma,当然你也可以换用其他的图片格式。

补充:网友cutsin的解决方法,把图像处理软件的色彩管理,指定为sRGB IEC61966-2.1。

纠正:经过和网友的一些交流和讨论,我又测试了一下,可以确定IE中产生色差是Gamma引起的(PNG压缩的时候删掉的是Gamma和tEXt,而tEXt的信息只是生成图片的软件信息,不会影响图片)。

测试工具是tweakpng

压缩前:

压缩后:

用Doctype激活Browser Modes

原先一直有个误解:以为只有不加Doctype才会Quirks Mode。

以下是Henri Sivonen统计的Doctype 和 browser modes关系的一个列表:

另外对IE6来说,在Doctype前面加<?xml version=”1.0″ encoding=”UTF-8″?>也会Quirks Mode,即使Doctype是Standards Mode。