« IPCN.org IPCHINA.org 域名坏掉的最新进展 | Main | ipcn.org ipchina.org 恢复 »
February 9, 2006
由于 firefox 不支持 document.all 引发的血案(及解决)
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。 https://windtear.net/archives/2006/02/09/000912.html http://windtear.net/archives/2006/02/09/000912.html 由于 firefox 不支持 document.all 引发的血案(及解决) 下午帮技术查一个问题 算是很严重的大问题 症状: 服务器不停接收undefined请求 大体看了一下 几乎都是来自Firefox的 很自然就想到javascript的事了 而一般javascript容易犯的错误是容错性判断不够 结合考虑浏览器 兼容性支持不够 不过一般的js错误不会产生请求 如今 AJAX 的概念很火爆 (几年前的提法叫无刷新技术) 这里遇到的是用 document.idname.src= 设置页面的小技巧 也算是 AJAX 吧 解决: 回到这个问题 追了一下 原因倒也很简单 一个 IMG 的 src 是 'javascript:preloadPic()' 而不幸的是 preloadPic 直接用了 document.all 了 function preloadPic() { document.imgInit.src=imgUrl[0]; if (document.all) { ...... } else { theTimer = setTimeout("preloadPic()",50); } } 就是 if (document.all) 这个馒头引发了一场血案 (追随潮流 纯属娱乐用语 大家领会精神即可) Firefox 不支持 document.all 显然这里一直执行 else 那块 也就是递归调用每0.05s来调用自己 执行起来就是每0.05s document.imgInit.src 会被设置一次不存在的URL(undefined) 于是 血案就发生了 服务器端无穷无尽的接收 http://域名/undefined 请求 (以下省略784字) 解决也很简单 不用document.all就行了 那么用什么呢? 如下: getElementsByTagName("*") 可以得到得到所有元素的集合 getElemntById 可以按id得到某一元素 getElementsByName 可以得到按name属性得到某一元素 Firefox 是好东西 大家记得支持 体现在写代码上就要考虑这事 利人利己:) |
Posted by windtear at February 9, 2006 5:27 PM