Frage

Hat den onload Ereignis Feuer des IFRAME, wenn die HTML vollständig heruntergeladen wird, oder nur dann, wenn alle abhängigen Elemente als auch laden? (Css / js / img)

War es hilfreich?

Lösung

Die letzteren. <body onload= Feuer nur, wenn alle abhängigen Elemente (css / js / img) haben auch geladen worden

Wenn Sie JavaScript-Code ausgeführt werden sollen, wenn das HTML geladen wurde, tut dies am Ende Ihres HTML:

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

Hier ist ein relevanten E-Mail-Thread über den Unterschied zwischen Last und fertig (jQuery unterstützt beides).

Andere Tipps

Die obige Antwort (mit Onload-Ereignisse) ist richtig, aber in bestimmten Fällen diese schlecht zu benehmen scheint. Vor allem, wenn dynamisch eine Druckvorlage für Web-Inhalte zu erzeugen.

Ich versuche, bestimmte Inhalte einer Seite zu drucken, indem eine dynamische iframe erstellen und zu drucken. Wenn es Bilder enthält kippe ich es bekommen zu schießen, wenn die Bilder geladen werden. Es ist immer noch zu früh ausgelöst wird, wenn die Bilder noch in einem unvollständigen Druck resultierenden geladen werden:

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()...
}

, wie Sie i verschiedene Methoden ausprobiert sehen können die onload-Handler zu binden ... in jedem Fall ist es zu früh ausgelöst wird. Ich weiß, dass, da die Browser Druckvorschau (Google Chrome) gebrochene Bilder enthält. Wenn ich den Druck abzubrechen und wieder diese Funktion aufrufen (Bilder werden nun im Cache gespeichert) die Druckvorschau in Ordnung ist.

... zum Glück fand ich eine Lösung. nicht schön, aber geeignet. Was sie tut, dass sie den Zweig für ‚img‘ -Tags durchsucht und den ‚vollständig‘ Zustand die zu prüfen. wenn uncomplete es verzögert eine erneute Überprüfung nach 250 ms.

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();
    });
}

Nur wenn die HTML-Lasten, nicht die abhängigen Elemente. (Oder so glaube ich).

Um zu feuern, wenn der Rest der Seite geladen hat jQuery (Fenster) .load (function () {oder window.onload nicht dokumentieren onready.

Sie können auch, wenn ein Bildelement prüfen, geladen und dort ... wenn Bild. load-- etc.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top