2012-08-16 32 views
34

जो समस्या मैंने पाया है वह this question के समान है, सिवाय इसके कि डेस्कटॉप पर सफारी ने इस मुद्दे को हल किया है। अनिवार्य रूप से, यह मुद्दा यह है: जब कोई ग्राहक मोबाइल सफारी पर ब्राउज़ कर रहा है और पृष्ठ pagea.html पर जावास्क्रिप्ट फ़ंक्शन निष्पादित करता है, तो पेजb.html पर नेविगेट करें, फिर पेजए.html पर वापस जाने के लिए बैक बटन दबाएं, जावास्क्रिप्ट फ़ंक्शन जब क्लाइंट पेजए.html पर वापस आने के लिए बैक बटन दबाएगा तब नहीं चलेगा। यह जावास्क्रिप्ट कॉल छोड़ देगा।मोबाइल सफारी बैक बटन

मैंने ऊपर दिए गए लिंक में उल्लिखित समाधानों का प्रयास किया है, लेकिन मोबाइल सफारी के लिए कुछ भी काम नहीं करता है। क्या किसी और को इस बग का सामना करना पड़ा है? आप उसे कैसे संभालते हैं?

+2

यदि आप अभी तक मौजूद नहीं हैं तो आप सभी लिंक यूआरएल को '?' के साथ जोड़ना चाहेंगे। उदाहरण: 'href =" next.html "' href = "next.html?" '' बनें। यह वेब ब्राउजर को एक संकेत देगा कि पृष्ठ की सामग्री गतिशील है और उस पृष्ठ पर जाकर फिर से सर्वर से पृष्ठ को फिर से लोड करना चाहिए। इसे बाहरी स्क्रिप्ट पर भी लागू किया जाना चाहिए। उदाहरण: 'src =" mylib.js "' src = "mylib.js?" '' बनें। – Jay

उत्तर

86

यह back-forward cache के कारण होता है। जब उपयोगकर्ता नेविगेट किया जाता है तो यह पृष्ठ की पूरी स्थिति को सहेजना है। जब उपयोगकर्ता बैक बटन पेज के साथ वापस नेविगेट करता है तो उसे कैश से बहुत जल्दी लोड किया जा सकता है। यह सामान्य कैश से अलग है जो केवल HTML कोड को कैश करता है।

जब पृष्ठ bfcache onload ईवेंट के लिए लोड किया जाता है तो ट्रिगर नहीं किया जाएगा। इसके बजाय आप onpageshow ईवेंट की persisted संपत्ति देख सकते हैं। यह प्रारंभिक पृष्ठ लोड पर गलत पर सेट है। जब पृष्ठ bfcache से लोड होता है तो यह सत्य पर सेट होता है।

window.onpageshow = function(event) { 
    if (event.persisted) { 
     alert("From back/forward cache."); 
    } 
}; 

किसी कारण से jQuery में इस संपत्ति में इस संपत्ति नहीं है। हालांकि आप इसे मूल घटना से पा सकते हैं।

$(window).bind("pageshow", function(event) { 
    if (event.originalEvent.persisted) { 
     alert("From back/forward cache."); 
    } 
}); 

इन समस्याओं का त्वरित समाधान पृष्ठ को फिर से लोड करना है जब बैक बटन दबाया जाता है। हालांकि यह किसी भी सकारात्मक प्रभाव को पीछे/आगे कैश देगा।

window.onpageshow = function(event) { 
    if (event.persisted) { 
     window.location.reload() 
    } 
}; 

एक sidenote रूप में, आप समाधान के रूप में खाली onunload हैंडलर का उपयोग कर की पेशकश पृष्ठों की बहुत देख सकते हैं। यह आईओएस 5 के बाद से काम नहीं किया है।

$(window).bind("unload", function() { }); 
+3

यह ध्यान दिया जाना चाहिए कि यह समाधान अब आईओएस के मौजूदा संस्करणों पर काम नहीं करता है (मुझे विश्वास है कि मैंने कहीं पढ़ा है यह 5ish से परे कुछ भी था)। पेजशो इवेंट पहले बैक/फॉरवर्ड के लिए आग लग जाएगा, और उस पृष्ठ इतिहास स्थिति के लिए कभी भी नहीं। एकमात्र व्यावहारिक समाधान जो मैंने पाया है वह है कि पॉपस्टेट ईवेंट का उपयोग पीछे/आगे की पहचान के लिए करना है। – Shiboe

+1

यह खाली ऑनलोड लोड हैंडलर जो आईओएस 5 के बाद से काम नहीं किया है। उपरोक्त उत्तर आईओएस 6 के लिए काम करता है। हालांकि आईओएस 7 के बारे में निश्चित नहीं है। थोड़ी देर बाद परीक्षण करेंगे। –

+0

यह आईओएस 7 पर काम करता है, लेकिन अगर स्क्रीन बंद हो जाती है और फिर से चालू हो जाती है तो पृष्ठ को रीफ्रेश करने का दुष्प्रभाव भी होता है। उस के आसपास पाने के लिए कोई रास्ता? – Dave4988

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