पता लगाएँ कि क्या पेज लोड हो रहा है


91

क्या पता लगाने का कोई तरीका है कि किसी पृष्ठ ने अपनी सभी सामग्री, जावास्क्रिप्ट और परिसंपत्तियाँ जैसे सीएसएस और छवियों को लोड करना समाप्त किया है?

बिल्कुल वैसा ही:

if(PAGE HAS FINISHED LOADING)
{
// do something amazing
}

और इसके अतिरिक्त यदि पृष्ठ 1 मिनट से अधिक समय से लोड हो रहा है तो कुछ और करें जैसे:

if(PAGE HAS BEEN LOADING FOR 1 MIN)
{
// do something else amazing
}

मैंने देखा है कि Apple के MobileMe जैसी वेबसाइटें समान जांच करती हैं, लेकिन अपने विशाल कोड पुस्तकालयों में इसका पता नहीं लगा पाई हैं।

क्या कोई मदद कर सकता है?

धन्यवाद

संपादित करें: यह अनिवार्य रूप से वह है जो मैं करना चाहता हूं:

// hide content
$("#hide").hide();

// hide loading
$("#loading").hide();

// fade in loading animation
setTimeout($('#loading').fadeIn(), 200);

jQuery(window).load(function() {
  $("#hide").fadeIn();

  $("#loading").fadeOut(function() {
    $(this).remove();
    clearInterval(loadingAnim);
  });

  setTimeout(function() {
    $("#error").fadeIn();
  }, 60000);
});

2
वहाँ एक कारण है कि window.onload(या $(window).load()) काम नहीं करेगा?
सलीडीहसीरहैक

हाय @Cameron। पेज लोड होने के बाद लोडर को छिपाने के लिए कौन सा कोड काम करता है?
tnkh

@TonyNg मेरा जवाब देखें: stackoverflow.com/questions/7083693/…
कैमरून

जवाबों:


125
jQuery(window).load(function () {
    alert('page is loaded');

    setTimeout(function () {
        alert('page is loaded and 1 minute has passed');   
    }, 60000);

});

या http://jsfiddle.net/tangibleJ/fLLrs/1/

JQuery (विंडो) .लोड पर स्पष्टीकरण के लिए http://api.jquery.com/load-event/ भी देखें ।

अपडेट करें

जावास्क्रिप्ट लोड हो रहा है और दो घटनाओं DOMContentLoaded और OnLoad कैसे काम करता है पर एक विस्तृत विवरण इस पृष्ठ पर पाया जा सकता है ।

DOMContentLoaded : जब DOM हेरफेर करने के लिए तैयार है। jQuery के इस ईवेंट को कैप्चर करने का तरीका है jQuery(document).ready(function () {});

ओनोलाड : जब DOM तैयार होता है और सभी संपत्तियाँ - इसमें चित्र, iframe, फोंट, आदि शामिल होते हैं - लोड किए गए होते हैं और चरखा / घंटा क्लास गायब हो जाता है। इस घटना को कैप्चर करने का jQuery का तरीका उपर्युक्त है jQuery(window).load


यदि आप मेरे ओपी को देखते हैं तो मैंने इसमें संशोधन किया है ताकि यह पता चले कि मेरे उद्देश्य क्या हैं। इसलिए अनिवार्य रूप से सभी संपत्तियों को लोड करने और सामग्री में लोडर और फीका होने के बाद मैं पृष्ठ दिखाना चाहता हूं। क्या मेरा कोड सही ढंग से काम करेगा? चीयर्स
कैमरून

आपका कोड ठीक दिखता है, लेकिन मुझे यह सुनिश्चित करने के लिए कार्रवाई में देखना होगा।
टीजे

@Jimmer हाँ: MDN : "लोड घटना निकाल दिया जाता है जब एक संसाधन है और इसकी निर्भर संसाधन समाप्त लोड हो रहा है है।"
टीजे

2
कृपया ध्यान दें कि jQuery.load()jQuery / 1.8 के बाद से हटा दिया गया था और jQuery / 3 में हटा दिया गया था। वर्तमान सिंटैक्स है jQuery(window).on("load", function(){/*...*/});
अलवारो गोंजालेज

58

वहाँ क्या आप के लिए देख रहे हैं के आधार पर jquery में ऐसा करने के दो तरीके हैं ..

jquery का उपयोग करके आप कर सकते हैं

  • // यह कॉल करने से पहले लोड की जाने वाली टेक्स्ट एसेट्स का इंतजार करेगा (डोम .. css .. js)

    $(document).ready(function(){...});
  • // यह निष्पादित करने से पहले सभी छवियों और पाठ परिसंपत्तियों को लोडिंग समाप्त करने के लिए इंतजार करेगा

    $(window).load(function(){...});

इस विधि में, आप यह कैसे बता सकते हैं कि पृष्ठ कई मिनट से लोड हो रहा है लेकिन अभी तक पूरा नहीं हुआ है?
yoozer8

2
यह एक सेटटाइमआउट (फ़ंक्शन () {भरी हुई && फू ();}, 20000) के साथ पूरा किया जा सकता है; और डॉक रेडी या विंडो लोड में सच में लोड किया गया सेट
samccone

1
jquery 3.0 के लिए $ (विंडो) .on ("लोड", फ़ंक्शन (e) {}) का उपयोग करें;
शून्य 8

13

उसे ओनलोड कहा जाता है। DOM तैयार वास्तव में उस सटीक कारण के लिए बनाया गया था जो onload छवियों पर इंतजार कर रहा था। ( कुछ समय पहले सिम्मिलर प्रश्न पर माचू से लिया गया उत्तर ।)

window.onload = function () { alert("It's loaded!") }

onload सभी संसाधनों की प्रतीक्षा करता है जो दस्तावेज़ का हिस्सा हैं।

एक सवाल का लिंक जहां उन्होंने यह सब समझाया:

मुझे क्लिक करें, आप जानते हैं कि आप चाहते हैं!


10

मुझे लगता है कि सबसे आसान तरीका होगा

var items = $('img, style, ...'), itemslen = items.length;

items.bind('load', function(){ 
    itemslen--;
    if (!itemlen) // Do stuff here
});

EDIT, थोड़ा पागल होना:

var items = $('a, abbr, acronym, address, applet, area, audio, b, base, ' + 
    'basefont, bdo, bgsound, big, body, blockquote, br, button, canvas, ' + 
    'caption, center, cite, code, col, colgroup, comment, custom, dd, del, ' +
    'dfn, dir, div, dl, document, dt, em, embed, fieldset, font, form, frame, ' +
    'frameset, head, hn, hr, html, i, iframe, img, input, ins, isindex, kbd, ' +
    'label, legend, li, link, listing, map, marquee, media, menu, meta, ' +
    'nextid, nobr, noframes, noscript, object, ol, optgroup, option, p, ' +
    'param, plaintext, pre, q, rt, ruby, s, samp, script, select, small, ' + 
    'source, span, strike, strong, style, sub, sup, table, tbody, td, ' + 
    'textarea, tfoot, th, thead, title, tr, tt, u, ul, var, wbr, video, ' + 
    'window, xmp'), itemslen = items.length;

items.bind('load', function(){ 
    itemslen--;
    if (!itemlen) // Do stuff here
});

मैं इस विचार को हालांकि itemslen कभी नहीं 0. के काउंट डाउन लगता है की तरह
प्रतिबंध लगाने

1
इस विधि के अनुसार - यह माना जाता है कि सभी सूचीबद्ध तत्वों में एक 'लोड' घटना है, जो उदाहरण में उनमें से कई नहीं है।
जॉन वेसबरी

6

एक अन्य विकल्प आप दस्तावेज़ की जांच कर सकते हैं। पहले से ही जैसे,

var chkReadyState = setInterval(function() {
    if (document.readyState == "complete") {
        // clear the interval
        clearInterval(chkReadyState);
        // finally your page is loaded.
    }
}, 100);

रेडीस्टेट पेज के प्रलेखन से पूर्ण राज्य का सारांश है

"लोड हो रहा है" लौटाता है, जबकि दस्तावेज़ लोड हो रहा है, "इंटरएक्टिव" एक बार यह पार्सिंग समाप्त हो गया है लेकिन अभी भी लोड हो रहा है उप-संसाधन, और "पूरा" एक बार लोड होने के बाद।


मुझे कैश्ड चित्रों के साथ समस्या हो रही है, और यह उस प्रदर्शन के लिए बेहतर कोड प्रतीत हो रहा है ... अभ्यास के बारे में आश्चर्य है? लगता है jQuery से बेहतर होगा $(window).on("load" function () {//dostuff})...?
किमी किमी

3

एक विकल्प यह है कि पृष्ठ रिक्त हो, जिसमें थोड़ी मात्रा में जावास्क्रिप्ट हो। वास्तविक पृष्ठ सामग्री प्राप्त करने के लिए AJAX कॉल करने के लिए स्क्रिप्ट का उपयोग करें और वर्तमान दस्तावेज़ पर परिणाम लिखने के लिए सफलता समारोह लिखें। टाइमआउट फ़ंक्शन में आप "कुछ और अद्भुत कर सकते हैं"

अनुमानित छद्मकोश:

$(document).ready(function(){
    $.ajax
      url of actual page
      success:do something amazing
      timeout: do something else
});

हाँ यही है। लेकिन यह पहला तरीका है जो मेरे मन में आया जब मैंने खुद से पूछा "कोई पृष्ठ यह कैसे बता सकता है कि क्या इसके लिए कोई अनुरोध किया गया है?"
yoozer8

अच्छी तरह से यह आपको यह नहीं बताएगा कि क्या छवियों ने लोडिंग पूरी कर ली है .. बल्कि यह कहेंगे कि अगर कच्चे मार्कअप को लोड किया गया है
samccone

हम्म। मुझे एक दिलचस्प सवाल पर ले जाता है। यदि आपने अभी $ (डॉक्यूमेंट) .html (रिस्पांस), और प्रतिक्रिया डॉक्यूमेंट को पहले से ही या एक window.load में सम्‍मिलित किया है, तो क्‍या डॉक्यूमेंट के लिखे जाने के बाद इसे निष्पादित किया जाएगा? या क्या ब्राउज़र पृष्ठ को पहले से लोड के रूप में देखेगा और उन्हें सामग्री परिवर्तन पर नहीं बुलाएगा?
yoozer8

मुझे लगता है कि इसे दूसरी बार कहेंगे लेकिन 100% नहीं ... इसे
आज़माएँ

2

क्या यह है जो आप के मन में था?

$("document").ready( function() {
    // do your stuff
}

1
यह डोम के तैयार होने पर चलेगा, लेकिन यह उन चीजों से पहले हो सकता है जैसे छवियों ने लोड करना समाप्त कर दिया है।
जेम्स एलार्डिस


2

Jquery या उस बीक्युस की तरह कुछ भी क्यों नहीं?

var loaded=0;
var loaded1min=0;
document.addEventListener("DOMContentLoaded", function(event) {
   loaded=1;
    setTimeout(function () {
      loaded1min=1;
    }, 60000);
});

यह सही है, लेकिन jqueryप्रदर्शन से थोड़ा अलग है। DOMContentLoadedकेवल बाहरी सामग्री लोड होने के बाद ट्रिगर किया जाता है (विशेष रूप से छवियां, जो कुछ स्थितियों में लंबा समय ले सकती हैं)। ब्राउज़र विशिष्ट घटनाओं का उपयोग करके jqueryप्रदर्शन करता .ready()है, जो (अधिकांश ब्राउज़र पर) बाहरी सामग्री लोड होने से पहले होता है।
grochmal

1

लोगों की FYI करें जिन्होंने टिप्पणियों में पूछा है, यह वही है जो मैं वास्तव में परियोजनाओं में उपयोग करता हूं:

function onLoad(loading, loaded) {
    if(document.readyState === 'complete'){
        return loaded();
    }
    loading();
    if (window.addEventListener) {
        window.addEventListener('load', loaded, false);
    }
    else if (window.attachEvent) {
        window.attachEvent('onload', loaded);
    }
};

onLoad(function(){
   console.log('I am waiting for the page to be loaded');
},
function(){
    console.log('The page is loaded');
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.