javascript - मैं पृष्ठ लोड पर window.onpopstate को कैसे अनदेखा कर सकता हूं?




jquery html5 (2)

मैं window.onpopstate साथ खेल रहा हूं, और एक ऐसी चीज है जो मुझे थोड़ा परेशान करती है:

ब्राउजर पॉपस्टैट इवेंट को पेज लोड पर अलग तरीके से हैंडल करते हैं। क्रोम और सफारी हमेशा पेज लोड पर एक पॉपस्टैट इवेंट का उत्सर्जन करते हैं, लेकिन फ़ायरफ़ॉक्स नहीं करता है।

source

मैंने इसका परीक्षण किया, और हाँ, क्रोम और सफारी में 5.1+ पॉपस्टैट घटना को पेज लोड पर निकाल दिया जाता है, लेकिन फ़ायरफ़ॉक्स या IE10 में नहीं।

समस्या यह है, कि मैं केवल popstate घटनाओं को popstate चाहता हूँ जहाँ उपयोगकर्ता ने बैक या फॉरवर्ड बटन पर क्लिक किया था (या इतिहास को जावास्क्रिप्ट के माध्यम से बदल दिया गया था), लेकिन पगेलोड पर कुछ भी नहीं करना चाहते।

दूसरे शब्दों में, मैं popstate घटना को अन्य popstate घटनाओं से पेज लोड से अलग करना चाहता हूं।

यह वही है जो मैंने अब तक कोशिश की है (मैं jQuery का उपयोग कर रहा हूं):

$(function() {
  console.log('document ready');

  setTimeout(function() {
    window.onpopstate = function(event) {
      // Do something here
    }, 10);
});

मूल रूप से मैं अपने listener कार्य को देर से popstate करने के लिए पृष्ठ लोड पर बाध्य नहीं होने का प्रयास करता हूं, केवल बाद में।

यह काम करने लगता है, हालांकि, मुझे यह समाधान पसंद नहीं है। मेरा मतलब है, मुझे कैसे यकीन हो सकता है कि सेटटाइमआउट के लिए चुना गया टाइमआउट काफी बड़ा है, लेकिन बहुत बड़ा नहीं है (क्योंकि मैं नहीं चाहता कि यह बहुत ज्यादा इंतजार करे)।

मुझे आशा है कि एक चालाक समाधान है!


इवेंट के बूलियन सत्य की event.statepopstate इवेंट हैंडलर में देखें:

window.addEventListener('popstate', function(event) {
    if (event.state) {
        alert('!');
    }
}, false);

यह सुनिश्चित करने के लिए कि history.pushState() कॉल करते समय हमेशा एक गैर- null राज्य तर्क निर्दिष्ट करें history.pushState() या history.replaceState() । इसके अलावा, History.js जैसे रैपर लाइब्रेरी का उपयोग करने पर विचार करें जो ब्राउज़रों में लगातार व्यवहार प्रदान करता है।


मेरे पास एक समान समस्या थी और मुझे यह सुनिश्चित करने के लिए मान्य करना था कि यदि पृष्ठ पूरी तरह से लोड किया गया था।

मैंने कुछ इस तरह इस्तेमाल किया:

var page_loaded = false;    
window.onpopstate = function(event){
    if(!page_loaded){
       page_loaded = true;
       return false;
     }
    //Continue With Your Code
}







html5