这几天写了一个树形javascript组件。准备在现在的项目中使用。结果今天一和项目结合。发现明明在html中引入了我的js文件。但是ie总是报错说某某对象不能识别。显然是没有引入成功的问题。
于是就带着莫名其妙的感觉查找原因,在项目环境里不能运行。把原来在文件系统的例子代码拷贝到项目中就能运行。查找不同点,结果发现文件系统中的html用的
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
项目中的文件用的
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
于是编码问题就呈现在眼前。
可以说javascript字符兼容性是非常弱智的,即使是字符在注释当中。我记起了当时用dreamweaver和editplus打开例子文件的时候,呈现不通的情况,就是有的中文注释中的中文字符是乱码。当然我提前已经把组件的js文件编码类型变为utf-8。出错的原因也不仅仅在与此,还有就是页面也引入了项目的共通的js文件,而且两个共通文件的编码类型存在差异。也就是说,一个html引入了不同编码类型的javascript文件,服务器或者是ie浏览器没有能够正确的识别之。
于是,我把组件js文件中的乱码删除,换之以英文注释。问题就突然解决了。
所以,给自己也给大家一个建议,在多人开发的时候,写js文件也要统一编码,而且尽可能的用英文注释。中文之让他出现在html中的js中。
2010-04-29
今天终于要把这篇文章设定为综合性文章了。
关于IE的判断
可用如下两种方法,算是最为简单
方法1: var ie = !-[1,]; alert(ie); if(-[1,]){ alert("这不是IE浏览器!"); }else{ alert("这是IE浏览器!"); } 方法二: var ie = !+"\v1";
通常我们经常用其他的一些特性(比如js之间方法的差异)来判断IE与非IE。而上述两种方法则是利用更少的资源来判断。方法引自http://www.iteye.com/topic/654801