2009-05-02 14 views
20

क्या आईएफआरएएम की ऑनलोड घटना आग लगती है जब एचटीएमएल पूरी तरह से डाउनलोड हो जाता है, या केवल तभी जब सभी आश्रित तत्व लोड होते हैं? (सीएसएस/जेएस/आईएमजी)एक आईएफआरएएम ऑनलोड घटना कब ठीक है?

+9

जब भी आप इंटरनेट एक्सप्लोरर का उपयोग नहीं कर रहे हैं, तब वह आग लगती है। – Tortoise

+0

जब आप iDevice का उपयोग नहीं कर रहे हैं, तो यह सभी तत्वों को लोड होने पर आग लग जाता है। – NoBugs

+0

@tortoise: मुझे मुस्कान बनाने के लिए धन्यवाद। – ling

उत्तर

20

उत्तरार्द्ध: <body onload= केवल तभी आग लगती है जब सभी आश्रित तत्व (सीएसएस/जेएस/आईएमजी) भी लोड हो चुके हैं।

आप जब एचटीएमएल लोड किया गया है जावा स्क्रिप्ट कोड को चलाने के लिए चाहते हैं, अपने HTML के अंत में ऐसा करते हैं:

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

यहाँ लोड और तैयार के बीच अंतर के बारे में relevant e-mail thread (है jQuery दोनों का समर्थन करता है)।

+1

मुझे लगता है कि यह मुख्य दस्तावेज़ के लिए भी सच है, न केवल iframes के लिए? – MatrixFrog

0

बस जब एचटीएमएल लोड होता है, निर्भर तत्व नहीं। (या तो मुझे लगता है)।

सक्रिय करने के लिए जब शेष पृष्ठ लोड होने करना jQuery (विंडो) .load (function() {या onready दस्तावेज़ नहीं window.onload।

तुम भी अगर एक छवि तत्व लोड किया जाता है देखने के लिए जाँच कर सकते हैं और वहाँ ... अगर छवि। load-- आदि

4

ऊपर जवाब (ऑनलोड घटना का प्रयोग करके) सही है, लेकिन कुछ मामलों में यह गलत व्यवहार करने के लिए जब गतिशील वेब सामग्री के लिए एक प्रिंट टेम्पलेट पैदा करने लगता है। विशेष रूप से।

मैं एक गतिशील iframe बनाकर और इसे प्रिंट करके एक पृष्ठ की कुछ सामग्री मुद्रित करने का प्रयास करता हूं। अगर इसमें छवियां हैं तो मैं इसे आग में नहीं ले सकता एन छवियों को लोड कर रहे हैं। यह हमेशा बहुत जल्दी जब चित्र अभी भी एक अधूरा प्रिंट में जिसके परिणामस्वरूप लोड कर रहे हैं आग:

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

के रूप में आप देख सकते हैं मैं कई तरीकों से बाहर करने की कोशिश की ऑनलोड हैंडलर बाध्य करने के लिए ... किसी भी मामले में यह बहुत जल्दी सक्रिय होगा में। मुझे पता है कि ब्राउज़र प्रिंट पूर्वावलोकन (गूगल क्रोम) में टूटी हुई छवियां हैं। जब मैं प्रिंट रद्द करता हूं और फिर से कार्य करता हूं (छवियों को अब कैश किया जाता है) प्रिंट पूर्वावलोकन ठीक है।

... सौभाग्य से मुझे एक समाधान मिला। सुंदर लेकिन उपयुक्त नहीं है। यह क्या करता है कि यह 'img' टैग के लिए subtree स्कैन करता है और उन की 'पूर्ण' स्थिति की जांच करता है। यदि अपूर्ण है तो यह 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(); 
    }); 
} 
+0

यह बहुत उपयोगी थाक्स – kofifus

संबंधित मुद्दे