2009-05-02 16 views

cevap

20

Sonuncu: <body onload= yalnızca tüm bağımlı öğeler (css/js/img) yüklendiğinde tetiklenir. HTML yüklendiğinde JavaScript kodu çalıştırmak istiyorsanız

HTML'nizin sonunda bunu: Burada

<script>alert('HTML loaded.')</script></body></html> 

yük ve hazır arasındaki fark hakkında bir relevant e-mail thread (olduğu jQuery her ikisini de destekler).

+1

Aynı şey, sadece iframe'ler için değil, ana belgenin kendisi için de geçerli olduğunu varsayıyorum. – MatrixFrog

0

Yalnızca html yüklendiğinde, bağımlı öğeler değil. (ya da öyle düşünüyorum). sayfanın geri kalanı yüklenmeden yaptığınızda

ateş etmek jQuery (pencere) .Load (function() {ya onready belgelememiştir window.onload.

Ayrıca bir resim öğesi yüklü olup olmadığını görmek için kontrol edebilirsiniz

ve görüntü. load-- vb (onload olayı kullanarak)

4

yukarıdaki cevabın doğru olup olmadığını dinamik web içeriği için bir baskı şablonu oluştururken ... Ancak bazı durumlarda bu Özellikle. yaramazlık var gibi görünüyor.

Dinamik bir iframe oluşturarak ve yazdırarak bir sayfanın belirli içeriğini yazdırmaya çalışıyorum. n görüntüler yüklenir. Her zaman çok erken görüntüleri hala tamamlanmamış baskı sonuçlanan yüklerken basar:

function printElement(jqElement){ 
    if (!$("#printframe").length){ 
     $("body").append('<iframe id="printframe" name="printframe" style="height: 0px; width: 0px; position: absolute" />'); 
    } 

    var printframe = $("#printframe")[0].contentWindow; 
    printframe.document.open(); 
    printframe.document.write('<html><head></head><body onload="window.focus(); window.print()">'); 
    printframe.document.write(jqElement[0].innerHTML); 
    printframe.document.write('</body></html>'); 
// printframe.document.body.onload = function(){ 
//  printframe.focus(); 
//  printframe.print(); 
// }; 
    printframe.document.close(); 
// printframe.focus(); 
// printframe.print(); 

// printframe.document.body.onload = function()... 
} 

Eğer çok erken ateş edeceği her durumda ... ben onload işleyici bağlamak için çeşitli yöntemler denedik görebilirsiniz. Tarayıcı baskı önizlemesi (google chrome) bozuk görüntüler içerdiğinden biliyorum. Yazdırmayı iptal ettiğimde ve bu işlevi tekrar çağırdığımda (görüntüler şimdi önbelleğe alınır), baskı önizlemesi düzgündür.

... Neyse ki bir çözüm buldum. güzel değil ama uygun. Ne yapar? 'Img' etiketleri için alt ağacı tarar ve bunların 'tam' durumunu kontrol eder. Tamamlanmamışsa, 250 ms sonra tekrar kontrol eder.

function delayUntilImgComplete(element, func){ 
    var images = element.find('img'); 
    var complete = true; 
    $.each(images, function(index, image){ 
     if (!image.complete) complete = false; 
    }); 
    if (complete) func(); 
    else setTimeout(function(){ 
     delayUntilImgComplete(element, func);} 
    , 250); 
}  

function printElement(jqElement){ 
    delayUntilImgComplete(jqElement, function(){ 
     if (!$("#printframe").length){ 
      $("body").append('<iframe id="printframe" name="printframe" style="height: 0px; width: 0px; position: absolute" />'); 
     } 

     var printframe = $("#printframe")[0].contentWindow; 
     printframe.document.open(); 
     printframe.document.write(jqElement[0].innerHTML); 
     printframe.document.close(); 
     printframe.focus(); 
     printframe.print(); 
    }); 
} 
+0

bu çok yardımcı olur thx – kofifus

İlgili konular