IE里behavior属性的一个小bug

我用的百优空间没有访问日志,所以我在K2模板的footer.php里加了一段代码,将每次访问的相关信息记录进一个文本文件里。这种方法的缺点是只能记录Blog页面的访问,其他的文件比如图片、js、CSS文件就没办法了。

这两天我的空间经常会提示数据库连接过多,而且垃圾评论也变得狂多。昨天修改了下这个插件,直接屏蔽所有全是英文并包含链接的评论。平常我很少看这个访问日志,只是每个月清理一下,以免影响速度。今天因为空间有问题,就去检查了一下,发现有很多对pngbehavior.htc文件的访问,有根目录下的/pngbehavior.htc,也有各个月份目录下的/2006/07/pngbehavior.htc,也有page下的/kfc/pngbehavior.htc。用WinRAR在我的网站备份文件里搜索了一下,发现CoolPlayer插件CoolPlayer插件的coolplayer.css文件里有"pngbehavior.htc"字样,具体的代码是:

img {
	behavior: url( pngbehavior.htc );
}

我对CSS了解不多,只记得CSS里background里会用到url,一般写成url(abc.png)表示和当前CSS文件同目录下的abc.png文件。而写成url(/abc.png)则表示网站根目录下的abc.png文件。写了个小html文件做测试,1.html文件里引用"/tmp/t.css"这个CSS文件,并加上一个div标签和一个img标签,img标签的src为"/mm.png",而CSS文件里写上:

img {
	behavior: url( pngbehavior.htc );
}
div{
	background: #FFF6BF url(haha.png) 8px 6px no-repeat;
}

把文件上传到网站上,开上IRIS嗅探器,在IE浏览器里输入这个html文件的地址。嗅探结果显示IE依次读取的是/1.html、/tmp/t.css、/pngbehavior.htc、/mm.png、/tmp/haha.png这几个地址。

也就是说,behavior里的url和background里的url还是有区别地,behavior的url不支持相对路径。写错了,behavior里的url不是不支持相对路径,是我的例子特殊了。behavior里的url的当前路径不是CSS文件的目录,而是当前页面的目录。也就是说,"/"目录下的html文件,"/tmp"目录下的CSS文件,background里的url使用的是CSS文件的当前路径"域名/tmp",而behavior里的url使用的是当前访问页面的当前路径"域名/"。bahavior属性好像只有IE支持,或许这是IE的bug?看访问日志里pngbehavior.htc文件的访问记录,User-Agent里有MSIE 6.0的,也有MSIE 7.0的,也就是说IE6和IE7里都有这个问题。

WordPress通过.htaccess文件接管访问,除了服务器上实际存在的文件外,其他的访问都被重定向到WordPress的index.php文件上。所以,这些对pngbehavior.htc文件的访问最终都会被WordPress处理,也就是说都会走一遍WordPress的整套程序,包括连接MySQL数据库、载入WordPress核心文件、载入插件、分析访问地址,最后给出HTTP 404。因为现在使用IE浏览器的人还是比较多的,所以对网站的性能还是有很大影响的,不仅占用了CPU资源,还增加MySQL连接数。而这个pngbehavior.htc文件,估计应该是为了解决IE无法处理png的alpha通道的问题吧,反正我也很少用Coolplayer,直接把这条CSS代码注释了事。

呃,目前CoolPlayer的最新版9.3版同样有这个问题。跟andot大大报bug去,啦啦~~

Update:最近接触到不少bug,包括IE的bug,Firefox 2.0里开发组非要在显示feed时只显示摘要,WordPress 2.1里开发组非要把以前feed里more标签无效改为有效。唉,这些关系民生,影响很多用户的事,怎么就没人管呢?IE也就算了,微软牛气嘛,这么多版本以来,哪个版本不能通过网页执行程序啊。Firefox和WordPress这样的开源软件也有这些问题,感觉开发组里没人为普通用户代言的,爱变成什么样就变成什么样。我越来越觉得WordPress不是我们普通WP用户的WordPress了,而是开发组的WordPress。

本文共有 4 条评论IE里behavior属性的一个小bug


  1. 1 andot

    这个不会增加 MySQL连接数 吧?其实最简单的办法就是把pngbehavior.htc复制到wp的根目录下。那个地方我就算写成
    img {
    behavior: url( /wp-content/plugins/coolplayer/pngbehavior.htc );
    }

    有些不安装在跟目录的用户,还是会有问题,除非用 PHP 来输出这个东西。呵呵。
    下个版本把这个加到 PHP 中输出吧。谢谢哈~~

  2. 2 David

    “不会。。。CSS,……”对于你首页这句表示质疑

  3. 3 itkele

    hello world

  4. 4 itkele

    问个问题,能否告诉我你用的wp的模板是什么?想学。

请留下您的评论: