2012-01-08 14 views
6

पहले बंद मुझे लगता है कि pushState फ़ंक्शन में पहला पैरामीटर क्या है? मैं इसे क्या पास करूं? मेरे पृष्ठ के माध्यम से स्क्रॉल करते समय मैं बस यूआरएल बदलना चाहता हूं। मैं व्यूपोर्ट में मौजूदा तत्व की आईडी से पूछताछ कर रहा हूं और इसकी आईडी यूआरएल में भी लिंक होना चाहिए। यह नीचे दिए गए कोड के साथ ठीक काम करता है।एचटीएमएल 5/jQuery: पुशस्टेट और पॉपस्टेट - गहरी लिंकिंग?

1.) अभी पता-में यूआरएल को सफलतापूर्वक बदल जाता है जब मैं अपने पृष्ठ के माध्यम से स्क्रॉल:

var currentHash, 
     url; 

    if (history && history.pushState) { 

     $(window).scroll(function() { 
      hash = $('.layer:in-viewport').attr('id'); 
      catHash = $("#"+hash).parent('section').attr('id'); 

      var data = "nothing"; 

      if (catHash != undefined) 
       url = "/" + catHash + "/" + hash; 
      else 
       url = "/" + hash; 

      if (currentHash != hash) { 

       window.history.pushState(data, hash, url); 

      } 

      currentHash = hash; 

     }); 

    } 

अब मैं दो प्रश्न हैं। जब मैं प्रारंभ में पृष्ठ लोड करता हूं तो मैं एड्रेसबार में यूआरएल/हैश से कैसे पूछ सकता हूं। तो कल्पना करें कि अब मेरे पास www.url.com/deep जैसा लिंक है, मैं जानना चाहता हूं कि क्या/गहरा है? क्या मुझे बस पूरे शीर्ष पर पूछना है। स्थान और इसे प्रत्येक "/" पर विभाजित करना है? मेरा मतलब है कि वे लिंक वास्तव में मौजूद नहीं हैं, तो मैं पुशस्टेट फ़ंक्शन के साथ एक यूआरएल को कॉल करते समय 404 पृष्ठों से कैसे बचूं?

2.) बैक बटन पर क्लिक करते समय पता बार में अंतिम परिवर्तन कैसे प्राप्त कर सकता हूं? तो मैं ब्राउज़र बैक बटन पर क्लिक करते समय /deep खोजना चाहता हूं ताकि मैं पृष्ठ पर उस स्थिति पर वापस जा सकूं। मुझे लगता है कि यह शायद पॉपस्टेट के साथ काम कर रहा है लेकिन मुझे पता नहीं चला कि कैसे!

आपकी मदद के लिए धन्यवाद!

अद्यतन:

window.history.pushState("test", hash, url); 

...

$(window).bind('popstate', function(event){ 
     console.log(event.data); 
    }); 

यह alway रिक्त है। क्या यह वापस "परीक्षण" नहीं करना चाहिए?

+0

'' नहीं event.data' – Quentin

+0

हाँ, मैं करने की कोशिश की event.state' है कि, लेकिन कोई 'event.state' जब मैं' सांत्वना .log (घटना); 'केवल डेटा है, हालांकि डेटा हमेशा "शून्य" होता है और यदि मैं' event.state 'को लॉग करने का प्रयास करता हूं तो यह हमेशा शून्य भी होता है! – matt

+1

ठीक है, समाधान मिला ... '$ (विंडो) .bind ('popstate', फ़ंक्शन (ईवेंट) {' काम नहीं करता है लेकिन 'window.onpopstate = function (event) {' करता है! – matt

उत्तर

6

पुशस्टेट फ़ंक्शन में पहला पैरामीटर क्या है?

the documentation से

राज्य वस्तु - राज्य वस्तु JavaScript ऑब्जेक्ट जो pushState द्वारा बनाई नया इतिहास प्रविष्टि() के साथ जुड़ा हुआ है। जब भी उपयोगकर्ता नए राज्य में जाता है, तो एक पॉपस्टेट ईवेंट निकाल दिया जाता है, और घटना की राज्य संपत्ति में इतिहास प्रविष्टि की स्थिति वस्तु की एक प्रति होती है।

तो यह आपकी पसंद के डेटा का एक बंडल है जिसे आप उस स्थिति में वापस आने पर वापस आते हैं।

अभी जब मैं अपने पृष्ठ से स्क्रॉल करता हूं तो एड्रेसबार में यूआरएल सफलतापूर्वक बदल जाता है। जब मैं प्रारंभ में पृष्ठ लोड करता हूं तो मैं एड्रेसबार में यूआरएल/हैश से कैसे पूछ सकता हूं।

location ऑब्जेक्ट को देखें ... लेकिन आपको इसकी आवश्यकता नहीं है। आप पृष्ठ सर्वर पक्ष को पॉप्युलेट कर सकते हैं (और चाहिए)। यह pushState के फायदों में से एक है, लिंक अभी भी काम करता है अगर जावास्क्रिप्ट उपलब्ध नहीं है और सर्वर साइड फ़ॉलबैक आसानी से एकीकृत है।

बैक बटन पर क्लिक करते समय पता बार में अंतिम परिवर्तन कैसे प्राप्त कर सकता हूं?

आप एक घटना श्रोता (एक popState घटना की तलाश में) जोड़ सकते हैं और डेटा आप इसे में संग्रहीत घटना वस्तु पर उपलब्ध हो जाएगा। MDN has an example

+0

धन्यवाद, मुझे लगभग मिल गया। मैंने पॉपस्टेट चीज़ के लिए अपना प्रश्न अपडेट किया। इसलिए मैं पहले डेटा के रूप में एक स्ट्रिंग स्टोर कर सकता था पुशस्टेट में विशेषता और बैक बटन दबाते समय इसे वापस प्राप्त करें, है ना? मुझे बस यह जानने की ज़रूरत है कि मैं ब्राउजर बैक बटन दबाते समय पुशस्टेट के साथ किए गए आखिरी बदलाव से कैसे पूछ सकता हूं। और एक और बात: मुझे सर्वर की चीज़ मिलती है, हालांकि मैं एक पृष्ठ पृष्ठ लेआउट के साथ (मेरे मामले में) इस पृष्ठ पर वापस कैसे आ सकता हूं और एड्रेसबार से पूछता हूं? मेरे पास एक पृष्ठ पृष्ठ लेआउट है जहां मैं पृष्ठ पर किसी निश्चित स्थिति पर यूआरएल बदलना चाहता हूं ... – matt

+0

जब मैं भेजता हूं उन जीनियेटेड (गैर मौजूद) गहरे लिंक में से एक और कोई उन्हें ब्राउज़र में खोलता है, मैं पृष्ठ पर उस पॉजिटॉन पर कूदना चाहता हूं। जैसा कि आप ऊपर देख सकते हैं '/ url' व्यूपोर्ट में तत्व की आईडी से मेल खाता है ...' हैश = $ ('लेयर: इन-व्यूपोर्ट')। Attr ('id'); 'तो जब 'div # उदाहरण 'व्यूपोर्ट में है मेरा यूआरएल 'abc.com/example' जैसा दिखता है। जब मैं पृष्ठ को फिर से लोड करता हूं तो मैं इस '/ example' से पूछताछ करना चाहता हूं और' # 'जोड़ता हूं और पृष्ठ पर इस पॉजिटॉन पर कूदता हूं। ऐसा मैं किस प्रकार करूं? – matt

+0

आप जिस डेटा को स्टोर करते हैं उसका उपयोग कैसे करते हैं? –

4

jQuery बाहर सार घटना वस्तु, आप चाहते हैं: event.originalEvent.state;

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

  • कोई संबंधित समस्या नहीं^_^