2012-07-03 10 views
5

मेरे पास एक फ़्लैश गेम है कि जब मैं ब्राउज़र टैब को बंद करता हूं तो मैं उस स्थिति को सहेजने की कोशिश कर रहा हूं।ऑन-विंडो-अनलोड अनुरोध पर क्रॉस-ब्राउज़र कैसे बनाएं?

//Called from Flash when window closes 
function sendRequest(url, params) { 
    $.ajax({ 
     type: "POST", 
     async: false, 
     url: url, 
     data: params 
    }) 
} 

$(window).unload(function() { 
    //Make Flash attempt to save the game when the window closes. 
    //Flash gets the necessary data and calls sendRequest() 
    document["flashGame"].saveBeforeUnload(); 
}); 
  • फ़ायरफ़ॉक्स:
  • Chrome के काम करने को सही ढंग से: यह निम्नलिखित jQuery कोड का उपयोग कर कार्य करता है सही ढंग से जब पुन: लोड नहीं बल्कि जब समापन टैब या ब्राउज़र
  • आईई (बंद करने सभी संस्करण): सभी

पर काम नहीं करता यह सभी ब्राउज़रों में सही ढंग से काम करने के लिए नहीं है, लेकिन सबसे महत्वपूर्ण क्रोम है (हमारे उपयोगकर्ताओं में से कई आईई नहीं हैं)।

फ्लैश सही ढंग से sendRequest (सभी ब्राउज़रों में, एक चेतावनी के साथ परीक्षण किया जाता है) को कॉल कर रहा है, इसलिए मुझे विश्वास नहीं है कि समस्या फ्लैश से आती है, लेकिन हो सकता है।

+1

मुझे नहीं लगता कि आप कर सकते हैं और न ही मुझे लगता है कि आपको भरोसा करना चाहिए। अगर आप ब्राउज़र को बंद करना चाहते हैं तो ब्राउज़र को बंद करना चाहते हैं। क्या ब्राउज़र को इंतजार करने के लिए आपके अनुरोध को कुछ एमएस से अधिक समय लेना चाहिए? 30 सेकंड टाइमर कहने पर गेम को क्यों न बचाएं ताकि वे सबसे लंबे समय तक 30 सेकंड हो जाएं, तो आपको अनलोड ईवेंट – dstarh

+0

@dstarh के बारे में चिंता करने की ज़रूरत नहीं है: हम पहले से ही टाइमर पर गेम को सहेजते हैं। इसका उद्देश्य खिलाड़ियों को पिछले कुछ सेकंड के कार्यों को खोने से रोकने के लिए है। अक्सर, उन अंतिम कुछ कार्यों महत्वपूर्ण हैं। – Fragsworth

+1

तो आप कह रहे हैं कि एक व्यक्ति को अपनी ब्राउज़र विंडो को बंद करने के लिए एक्स पर क्लिक करने से उम्मीद करनी चाहिए कि पिछले कुछ सेकंड में जो कुछ भी उन्होंने किया है उसे बचाया जाना चाहिए? मुझे लगता है कि उपयोगकर्ता को एक सेव बटन पर क्लिक करने के लिए प्रशिक्षण देना है और फिर ब्राउजर को बंद करना बेहतर समय बिताया है।हमें उपयोगकर्ताओं को मानसिकता से बाहर निकालना होगा "मैंने दीवार से पावर कॉर्ड खींच लिया, सबकुछ क्यों बचाया नहीं ???? !!!" – dstarh

उत्तर

6

संक्षिप्त उत्तर है कि आप नहीं कर सकते।

onbeforeunload ईवेंट प्रारंभ में माइक्रोसॉफ्ट द्वारा मानक पुष्टि संवाद की अनुमति देने के लिए पेश किया गया था। अब यह अधिकांश ब्राउज़रों द्वारा मूल रूप में समर्थित है और ज्यादातर मामलों में एक छोटा, गैर इंटरैक्टिव, फ़ंक्शन निष्पादित करने की अनुमति है (उदाहरण के लिए आप स्थानीय स्थिति में अपना राज्य लॉग कर सकते हैं)। लेकिन, the cross-browser jQuery API में वर्णित है, इस अविश्वसनीय है:

अनलोड घटना की सही से निपटने ब्राउज़रों के संस्करण के लिए संस्करण से अलग है। उदाहरण के लिए, फ़ायरफ़ॉक्स के कुछ संस्करण ईवेंट को ट्रिगर करते समय ईवेंट ट्रिगर करते हैं, लेकिन विंडो बंद होने पर नहीं। व्यावहारिक उपयोग में, सभी समर्थित ब्राउज़रों, पर व्यवहार का परीक्षण किया जाना चाहिए और मालिकाना प्रीनलोड लोड ईवेंट के विपरीत।

के रूप में वहाँ कई संभावित सुरक्षा में किसी कार्य के निष्पादन से संबंधित समस्याएं हैं जब उपयोगकर्ता पेज (और इस प्रकार लिपि), यह शायद जब तक अविश्वसनीय (और अगर) हो जाएगा एक गंभीर सामान्य प्रयास है खत्म करने के लिए कहा onbeforeunload कॉलबैक में वास्तव में क्या किया जा सकता है सटीक करने के लिए किया गया।

अनुमानित भविष्य के लिए, onbeforeunload पर निर्भर नहीं है लेकिन अन्य योजनाओं का उपयोग करने के लिए, उदाहरण के लिए निरंतर पृष्ठभूमि की बचत या एक बड़ा "सहेजें" बटन।

1

window.onbeforeunload आज़माएं। मैं एक संभव समाधान के रूप में jQueryBug Tracker में यह पाया:

window.onbeforeunload = function() { return "text"; } 
संबंधित मुद्दे