今天遇到了一个浏览器兼容的问题,很简单也很常见,但查起原因来有点难。所以在这里记录一下,做个备份。
基本业务是这样子的:点击一张图片显示数据选项。具体结构如下:
<div class="xiazai">
<a href="javascript:void(0);" onclick="download('downLoadAlert',this);">
<img src="images/xiazai.png" title="下载" /></a>
</div>
download方法是写在一个JS文件中的,且在当前JSP页面中有引用。基本结构如下:
function download(obj){ ...... }进行测试时在IE下很正常,火狐却报错:download() is not a function。很明显我的download是个方法且存在且当前页面能找到它(firebug的脚本选项下能找到引入的JS文件),为什么还会报这种错,网上查说因为系统中某个对象的ID或name叫这个所以找不到了,于是搜了当前JSP页面没找到,搜了整个项目果然有一个ID叫这个的,于是改成了downloadSet()方法。
再次测试,火狐还是不正常,报错:downloadSet is not defined。没有定义是不可能的,当前页面还能找到它呢。绝对又是兼容性问题,再查,没找到原因找到解决办法了。如下:
window.downloadSet=function(obj){ ...... }如此之后,一切正常了。
得到的教训就是:在以后的开发中取名尽可能复杂点,或下划线或长名字;其次定义方法时最好写成window.functionName=function(){}的格式比较好。以免出现没必要的麻烦。