做bs结构开发的人大部分应该都对做浏览器兼容的经历深有体会吧。对ie各个版本的兼容,ie和firefox的兼容等,尤其是用div+css布局的时候,各版本浏览器的兼容问题尤为突出。
最近给公司封装一个多附件上传的控件,就遇到了两个不算是问题的问题,让我查了将近半小时才找出来原因。
第一个问题:事情是这样的,原先我一直是先在ie8环境下开发测试我的代码(调试方便),一切进展顺利。突然有一天我的电脑坏了,公司就临时调了一台电脑过来给我用,相同的代码在这台机器上的ie里运行却报错了,按照错误提示信息找到相应的代码,发现提示信息根本就是驴唇不对马嘴,于是我开始全盘检查我的html javascript代码是否有不通用的地方,未果,当时挺崩溃的,因为我的上传控件是借用的flash的附件上传功能,难道flash和js的通讯在ie6下有行不通的地方?这可是致命的硬伤啊!不过问题没有我想象的那么严重,原来是因为我的html文件和js文件的编码不一致,导致的这个问题,将编码调一致之后一切正常运行。看来ie6没有分别判别各个文件的编码,而是都按照主文件的编码去解析了,新版的ie和firefox则没有这个问题,虚惊一场。
第二个问题更是让我觉得无奈:
由于我写的这个控件分成了好几个js文件,我不想都在页面里包这些文件,那样使用者也会觉得麻烦,于是我在我的一个js主文件里通过这个方式包了那些文件:
function include( strSrc )
{
document.write('<script language="text/javascript" src="'+ strSrc +'"></script>');
}
问题出现了,这些包的文件死活都不运行,在网上查了很长时间,试了各种方法还是未果。不知道大家看出代码的问题了吗?
language="text/javascript"
language属性是w3c不支持的过时的属性,不过在新版浏览器里还是影响了解析,由于我把language属性的值写错了,导致浏览器认为我运行的不是一段javascript。正确标准的写法应该是
type="text/javascript",改完之后一切运行正常