سؤال

هل يتم إطلاق حدث onload الخاص بـ IFRAME عندما يتم تنزيل HTML بالكامل، أم فقط عند تحميل جميع العناصر التابعة أيضًا؟(سي إس إس / شبيبة / إمغ)

هل كانت مفيدة؟

المحلول

الأخير: <body onload= يتم تشغيله فقط عند تحميل كافة العناصر التابعة (css/js/img) أيضًا.

إذا كنت تريد تشغيل كود JavaScript بعد تحميل HTML، فقم بذلك في نهاية HTML:

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

هنا أ موضوع البريد الإلكتروني ذات الصلة حول الفرق بين حمولة و مستعد (يدعم jQuery كليهما).

نصائح أخرى

والجواب أعلاه (باستخدام الحدث OnLoad) هو الصحيح، ولكن في بعض الحالات يبدو أن هذا يسيئون التصرف. وخصوصا عندما توليد حيوي قالب الطباعة لشبكة المحتوى.

وأنا أحاول لطباعة محتويات معينة من الصفحة عن طريق إنشاء الإطار من الديناميكية وطباعته. إذا كان يحتوي على صور أنا غير قادر على الحصول عليه لاطلاق النار عندما يتم تحميل الصور. دائما تطلق قريبا جدا عند الصور لا تزال تحميل مما أدى إلى الطباعة غير مكتملة:

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

وكما ترون انا جربت عدة طرق لربط معالج ONLOAD ... على أي حال فإنه سيتم اطلاق النار في وقت مبكر جدا. وأنا أعلم أن لمعاينة متصفح الطباعة (جوجل كروم) تحتوي على صور مقطوعة. عندما قمت بإلغاء الطباعة وندعو تلك الوظيفة مرة أخرى (يتم مؤقتا الصور الآن) المعاينة قبل الطباعة على ما يرام.

... لحسن الحظ وجدت حلا. ليست جميلة ولكن مناسبة. ما يفعل ذلك فإنه بفحص الشجرة الفرعية لعلامات 'img الصورة والتحقق من حالة "كاملة" من هؤلاء. إذا uncomplete أنها أخرت إعادة تدقيق بعد 250ms.

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

وفقط عند تحميل أتش تي أم أل، وليس العناصر التابعة. (أو هكذا أعتقد).

لاطلاق النار عندما بقية تحميل الصفحة هل مسج (إطار) .load (وظيفة () {أو window.onload لا توثيق استدعاء onready.

ويمكنك أيضا التحقق لمعرفة ما إذا كان يتم تحميل عنصر الصورة وهناك ... إذا الصورة. load-- الخ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top