proxy代理   soft软件   IT 业界特快   norton 诺顿病毒库   代理列表   search FTP搜索   whois IP地理位置   blog 追求完美  
money理财   life生活   RSS聚合门户   firefox WEB浏览器   免费域名   typeset 假古文   AntiVirus 反病毒   ipcn 站点导航  

« 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 是好东西
大家记得支持 体现在写代码上就要考虑这事
利人利己:)
本blog WWW

Posted by windtear at February 9, 2006 5:27 PM

本站使用中的任何问题,请与 windtear @ windtear.net 联系
Copyright© 1999-2024 Windtear. All rights reserved.