2009-10-06 21 views
5

IE có thuộc tính readyState trong đối tượng tài liệu, cho biết trạng thái hiện tại, ví dụ: "tải", "hoàn thành", v.v.document.readyState analog cho các trình duyệt dựa trên gecko

Có cách nào để tìm trạng thái tải tài liệu hiện tại trong các trình duyệt dựa trên Mozilla không? Tôi biết sự kiện DOMContentLoaded, nhưng nó sẽ không phù hợp với tình hình của tôi, vì mã của tôi có thể được thực hiện sau khi sự kiện này được kích hoạt.

Đã thêm: không, tôi không thể sử dụng bất kỳ khung công tác nào và không nhầm lẫn với thuộc tính .readyState của đối tượng XHR. Và đó là một bookmarklet, vì vậy nó có thể được chèn vào ở bất kỳ giai đoạn tải.

Đã thêm sau: Dù sao, có vẻ như đây không phải là vấn đề lớn đối với tôi. Bởi vì thuộc tính này will be added in FF3.6, và nó không phá vỡ những thứ xấu trong firefox, khi bạn thao tác trên DOM chưa hoàn thành (unlike IE).

+0

ở cuối nội dung động

2

Có thể thực hiện được không? Chỉ cần được thông báo về sự kiện DOM và lưu trữ trạng thái của nó. Tôi không thấy vấn đề gốc của bạn là gì. Chắc chắn bạn có thể tách ra khỏi ruột của phương pháp này và thích ứng với tình huống của bạn.

cách jQuery làm việc đó:

// Mozilla, Opera and webkit nightlies currently support this event 
if (document.addEventListener) { 
    // Use the handy event callback 
    document.addEventListener("DOMContentLoaded", function(){ 
       //do stuff 
    }, false); 

// If IE event model is used 
} else if (document.attachEvent) { 
    // ensure firing before onload, 
    // maybe late but safe also for iframes 
    document.attachEvent("onreadystatechange", function(){ 
     if (document.readyState === "complete") { 
      document.detachEvent("onreadystatechange", arguments.callee); 
      jQuery.ready(); 
     } 
    }); 

    // If IE and not an iframe 
    // continually check to see if the document is ready 
    if (document.documentElement.doScroll && window == window.top) (function(){ 
     if (jQuery.isReady) return; 

     try { 
      // If IE is used, use the trick by Diego Perini 
      // http://javascript.nwbox.com/IEContentLoaded/ 
      document.documentElement.doScroll("left"); 
     } catch(error) { 
      setTimeout(arguments.callee, 0); 
      return; 
     } 

     // and execute any waiting functions 
     jQuery.ready(); 
    })(); 
} 

// A fallback to window.onload, that will always work 
jQuery.event.add(window, "load", jQuery.ready); 
+0

Mã này không thể phát hiện nếu tài liệu được tải nếu tài liệu được tự bao gồm sau khi tài liệu đã được tải (ví dụ: bookmarklet, động bao gồm