2011年4月15日星期五

动态加载js和image事件监听bug以及处理方式

在IE6下bug很明显,分别是:

js:

  1: function fCreateScript(){
  2:     var oScript = document.createElement("SCRIPT");
  3:     document.getElementsByTagName("HEAD")[0].appendChild(oScript);
  4:     oScript.src = sUrl;
  5:     oScript.attachEvent("onreadystatechange",function(){fReadyStateChangeHandler(oScript)});
  6: }
  7: function fReadyStateChangeHandler(oScript){
  8:     alert(oScript.readyState);
  9:     //在读取数据的情况下,IE6先会出complete,这时候JS没有在window下面执行
 10:     //然后会出loaded
 11:     //在读取缓存情况下,只会出complete
 12:     //这时候只能使用额外的方法判断JS是否加载成功
 13:     //造成这个问题的主要原因是oScript在设置src之前就加到了HEAD里面
 14: }
要解决以上问题,需要在oScript加入dom之前设置它的src,readyState的新请求状态就为:loading->complete/loaded;读缓存的状态就为:loaded
 
img:
  1: function fLoadImg(){
  2:     var oImg = document.createElement("IMG");
  3:     oImg.src = sImgSrc;
  4:     oImg.onload = function(){
  5:         alert("onloaded");
  6:         //如果是图片缓存,在设置onload函数之前图片已经加载完成
  7:         //这时候是不会触发onload事件
  8:     }
  9: }
要解决以上问题,需要在设置oImg的src之前就绑定onload,onerror等事件。

没有评论:

发表评论