IE中JavaScript DOM ready应用技巧

有时候,如果我们只需要对DOM进行操作,那么这时就没必要等到页面全部加载了,我们需要更快的方法。Firefox有DOMContentLoaded事件可以轻松解决,可惜的就是IE没有。

推荐阅读:Javascript解决常见浏览器兼容问题

MSDN关于JavaScript的一个方法有段不起眼的话,当页面DOM未加载完成时,调用doScroll方法时,会产生异常。那么我们反过来用,如果不异常,那么就是页面DOM加载完毕了!

 
 
 
  1. function IEContentLoaded (w, fn) {   
  2. var d = w.document, done = false,   
  3. // only fire once   
  4. init = function () {   
  5. if (!done) {   
  6. done = true;   
  7. fn();   
  8. }   
  9. };  
 
 
 
  1. // polling for no errors   
  2. (function () {   
  3. try {   
  4. // throws errors until after ondocumentready   
  5. d.documentElement.doScroll('left');   
  6. } catch (e) {   
  7. setTimeout(arguments.callee, 50);   
  8. return;   
  9. }   
  10. // no errors, fire   
  11. init();   
  12. })();  
 
 
 
  1. // trying to always fire before onload   
  2. d.onreadystatechange = function() {   
  3. if (d.readyState == 'complete') {   
  4. d.onreadystatechange = null;   
  5. init();   
  6. }   
  7. };   

这个函数是Diego Perini在07年就发布了这个方法,而且获得了广泛认同,以至于现在许多开源框架都是借鉴这种方法,譬如jQuery中的ready。如果以后需要用到IE的DomReady,就是它了。用法:

 
 
 
  1. IEContentLoaded( document.getElementById("test") , test );   
  2. function test(){ } 

 

【编辑推荐】

  1. Firefox完全兼容Javascript脚本方法
  2. JavaScript跨浏览器兼容测试三步走
  3. Javascript解决常见浏览器兼容问题
THE END