2009-06-05 17 views
8

Tôi biết rằng onload sự kiện đợi tài nguyên trang tải trước khi kích hoạt - hình ảnh, biểu định kiểu, v.v.Body.onload có chờ cho IFrame không?

Nhưng điều này có bao gồm IFrame bên trong trang không? Nói cách khác, nó có đảm bảo rằng tất cả các khung hình của trẻ em 'onload s sẽ luôn luôn kích hoạt trước khi cha mẹ làm không?

Ngoài ra, vui lòng cho tôi biết nếu hành vi khác nhau giữa các trình duyệt.

Trả lời

3

Như tôi thấy trên các trang của mình, mỗi khung nội tuyến có tải trọng độc lập và tải trên khung hình đầu tiên không chờ các iframe kích hoạt.

Tôi nhận biểu ngữ gif/png trên trang web của mình đôi khi tải rất chậm, vì vậy tôi đặt chúng vào iframe và điều đó làm cho toàn bộ trang web và sự kiện onload hoạt động nhanh hơn.

+4

Điều này không đúng. Trong hầu hết các trường hợp, sự kiện tải sẽ không kích hoạt cho đến khi tất cả nội dung trong iframe đã tải xong. Tham khảo thông tin sau đây để biết thêm thông tin: http://www.stevesouders.com/blog/2009/06/03/using-iframes-sparingly/ – BarelyFitz

7

Không, không. Nếu bạn muốn làm điều gì đó như vậy, bạn sẽ cần thêm trình xử lý tải trên cho khung nội tuyến. Bạn có thể làm điều này độc đáo với jQuery:

<iframe src="http://digg.com"></iframe> 
    <script> 
    var count = $('iframe').length; 
    $(function() { 
     // alert('loaded'); // will show you when the regular body loads 
     $('iframe').load(function() { 
     count--; 
     if (count == 0) 
      alert('all frames loaded'); 
     }); 
    }); 
    </script> 

Điều này sẽ cảnh báo khi tất cả các khung được tải.

Xem ví dụ:

http://jsbin.com/azilo

+1

+1 Tôi cần thực hiện việc này. Cảm ơn bạn đã giải quyết vấn đề của tôi (phát sinh 3 năm trong tương lai đối với câu trả lời này); – msanford

+1

Ví dụ bạn cung cấp đang sử dụng sự kiện jQuery DOMready chứ không phải sự kiện window.load. Nếu bạn sửa đổi ví dụ của mình, bạn sẽ thấy rằng sự kiện window.load không kích hoạt cho đến sau khi tất cả nội dung trong iframe đã tải. Tham khảo thông tin sau đây để biết thêm thông tin: http://www.stevesouders.com/blog/2009/06/03/using-iframes-sparingly/ – BarelyFitz

5

Hoặc đơn giản javascript nên làm việc ..

function checkIframes() { 
    if(!i) { i = 0; } 
    if(document.getElementsByTagName('iframe')[i]) { 
     document.getElementsByTagName('iframe')[i].onload = function() { i++; checkIframes(); } 
    } 
    else { yourFunctionInHere(); } 
} 

đã không thực sự thử nghiệm này, nhưng nên làm việc ... hơn đề cập đến nó với document.onload = function() { checkIframes(); }

Tôi không thực sự thích các thư viện như jQuery, bởi vì cho đến nay tôi thấy tôi có thể đạt được nhiều hơn với ít mã hơn, với javascript thông thường.

+0

+1 cho vanilla JS. – msanford

+0

Điều này làm việc cho tôi, nhưng tôi cần phải thêm một 'setTimeout' vào chức năng kiểm tra để tránh tràn ngăn xếp. – jmargolisvt