2010-07-13 18 views
68

क्या किसी को पता है कि onbeforeunload ईवेंट आईपैड पर समर्थित है और/या यदि इसका उपयोग करने का कोई अलग तरीका है?window.onbeforeunload आईपैड पर काम नहीं कर रहा है?

मैंने बहुत कुछ करने की कोशिश की है, और ऐसा लगता है कि onbeforeunload ईवेंट आईपैड (सफारी ब्राउज़र) पर कभी ट्रिगर नहीं हुआ है।

विशेष रूप से, यह मैं क्या कोशिश की है है:

  • window.onbeforeunload = function(event) { event.returnValue = 'test'; }
  • window.onbeforeunload = function(event) { return 'test'; }
  • (एक साथ ऊपर के दोनों)
  • window.onbeforeunload = function(event) { alert('test')'; }
  • (ऊपर कार्यों के सभी लेकिन अंदर <body onbeforeunload="...">

पीसी पर एफएफ और सफारी पर ये सभी काम, लेकिन आईपैड पर नहीं।

इसके अलावा, मैं किया है निम्नलिखित सिर्फ पेज लोड करने के बाद: क्रमशः

alert('onbeforeunload' in window); 
alert(typeof window.onbeforeunload); 
alert(window.onbeforeunload); 

, परिणाम हैं:

  • true
  • object
  • null

तो, ब्राउज़र में संपत्ति है, लेकिन किसी कारण से इसे निकाल दिया नहीं जाता है।

तरीके मैं पृष्ठ से नेविगेट करने की कोशिश, और एक बुकमार्क पर क्लिक करके वापस और आगे बटन,, शीर्ष बार में एक Google खोज कर रही है पता पट्टी में स्थान को परिवर्तित करके क्लिक करके कर रहे हैं।

क्या किसी के पास क्या हो रहा है इसके बारे में कोई जानकारी है? मैं किसी भी इनपुट की सराहना करता हूं।

धन्यवाद

+0

तुम दोनों आपके इनपुट के लिए धन्यवाद। यह आपके द्वारा उल्लिखित कारणों में से एक होना चाहिए। दुर्भाग्यवश, ऐप्पल से इस और अन्य सीमाओं के बारे में कोई आधिकारिक दस्तावेज नहीं है। उम्मीद है कि, इस सुविधा को सक्षम करने के दौरान, वे इसके दुर्भावनापूर्ण उपयोग को रोकने के दौरान एक और रचनात्मक तरीके से आएंगे। मैं अक्सर यह सुनता हूं कि लोग गलती से पृष्ठ से दूर टैप करते हैं और एक फॉर्म में दर्ज किए गए सभी डेटा खो देते हैं। –

+0

क्या आपने 'addEventListener() 'का उपयोग करने का प्रयास किया है? – Hello71

+2

मुझे यकीन है कि 'पहले से लोड' आईओएस पर सफारी पर काम नहीं करता है। :-(शायद आप जो खोज रहे हैं वह नहीं है, लेकिन मेरे पास एक सुझाव है कि [काम करने के लिए पहले से पहले परीक्षण 'के लिए परीक्षण करें] (http://stackoverflow.com/a/18137334/345716) –

उत्तर

4

केवल एप्पल निश्चित रूप से पता है, लेकिन मेरा अनुमान है कि वे जानबूझकर क्योंकि यह सबसे अधिक बार अपनी साइट या पॉप पर रहने के लिए आप को पाने के लिए छायादार पात्रों द्वारा प्रयोग किया जाता है मोबाइल सफारी में है कि कार्यक्षमता को सक्षम नहीं किया है बहुत सारे अश्लील/विज्ञापन खिड़कियां।

+46

या, आप जानते हैं, अपने परिवर्तनों को स्वचालित रूप से सहेजें, इसलिए वे गलत नहीं हैं क्योंकि आपने गलती से गलत चीज़ को टैप किया है। –

+4

मैंने नहीं कहा कि वैध उपयोग नहीं थे , मैंने अभी कहा है कि वे अक्सर उपयोग करते थे। –

+3

@ जोएलमुएलर आपकी टिप्पणी स्वीकार्य उत्तर होना चाहिए :) –

3

onbeforeunload के साथ एक known bug in WebKit नहीं है। मेरा मानना ​​है कि यह क्रोम 5 के नवीनतम बीटा में तय है, लेकिन यह काफी संभव है कि आईपैड का ब्राउज़र वेबकिट के एक संस्करण से बनाया गया है जिसमें फिक्स नहीं है।

Related Chrome bug report

+1

मैं उलझन में हूं या आईपैड ब्राउज़र पर यह बग अभी भी मौजूद है? – Peter

13

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

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

+0

क्या आपके पास इस कामकाज के लिए कोई उदाहरण है? – testndtv

+0

हू, यह पुष्टि क्विर्क लगता है (कि दूसरा पृष्ठ पुष्टिकरण संदेश से पहले मारा गया है) केवल मोबाइल सफारी के लिए नहीं बल्कि फ़ायरफ़ॉक्स (और शायद अन्य) के लिए भी सही है। तुमने मेरा दिमाग उड़ा दिया। 'पेजहाइड' के पक्ष में – Amalgovinus

+2

'अनलोड' ईवेंट बहिष्कृत किया गया है https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511 -SW5 – sol0mka

1

यदि आपको केवल यह जानने की आवश्यकता है कि पृष्ठ छोड़ा गया है तो आप document.unload का उपयोग कर सकते हैं। यह आईओएस ब्राउज़र में ठीक काम करता है। आप Apple documentation पर देखते हैं आप पाएंगे कि यह पदावनत है और वे document.pagehide उपयोग करने के लिए

+0

'document.pagehide' मेरे लिए अच्छा काम करता है, धन्यवाद! – yarl

2

https://code.google.com/p/chromium/issues/detail?id=97035

सुन देख सुझाव देते हैं।

अलर्ट नहीं रह पेज बर्खास्तगी की घटनाओं के दौरान अनुमति दी जाती है (beforeunload, उतारना, pagehide)।

मुझे लगता है कि अलर्ट, प्रॉम्प्ट, पुष्टिकरण और इन जैसे अन्य कार्यों की अब अनुमति नहीं है।

2

प्रीनलोड लोड मोबाइल सफारी द्वारा समर्थित नहीं है। आप यहां सभी समर्थित घटनाओं की सूची देख सकते हैं: Handling Events Apple documentation

और पहले से लोड सूची में नहीं है!

8

JavaScript का यह थोड़ा मेरे लिए काम करता सफारी और क्रोम पर iPad और iPhone, साथ ही डेस्कटॉप/लैपटॉप/अन्य ब्राउज़र पर:

var isOnIOS = navigator.userAgent.match(/iPad/i)|| navigator.userAgent.match(/iPhone/i); 
var eventName = isOnIOS ? "pagehide" : "beforeunload"; 

window.addEventListener(eventName, function (event) { 
    window.event.cancelBubble = true; // Don't know if this works on iOS but it might! 
    ... 
}); 
+1

यह घटना को पकड़ सकता है, लेकिन आप पुष्टिकरण संकेत कैसे पॉप अप कर सकते हैं?'रिटर्न' टेस्ट 'का उपयोग करना;' ओप द्वारा इसी तरह काम नहीं कर रहा है .. – user2335065

+0

धन्यवाद मुझे मूल प्रश्न में याद आया। मैंने विशेष रूप से आईओएस पर इसका परीक्षण नहीं किया है, लेकिन संभवतः यह अतिरिक्त लाइन जोड़ना काम करेगा: \t window.event.cancelBubble = true; मैं अपने उत्तर में – Danger

+2

धन्यवाद जोड़ूंगा, लेकिन दुख की बात यह काम नहीं करती है ... मैंने इसके अंदर अलर्ट() डालने की कोशिश की, ऐसा लगता है कि नया पृष्ठ चेतावनी से पहले लोड हो गया है() निकाल दिया गया है। यह भी देखें: http://stackoverflow.com/questions/3239834/window-onbeforeunload-not-working-on-the-ipad – user2335065

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