2009-10-02 12 views
5

मैं window.onbeforeunload घटना के बाद कोड का उपयोग कर कब्जा कर रहा हूँ के साथ पेज अनलोड रद्द त्रुटि "अज्ञात अपवाद" हो जाते हैं और निम्नलिखित डिबगर से प्रकाश डाला गया है:"अज्ञात अपवाद" जब "location.href"

onclick="location.href='/<WhicheverPageYouRequested>.aspx'; 

अगर मैं ठीक है, पेज परिवर्तन पूरी तरह से क्लिक करें। मुझे यह त्रुटि क्यों मिल रही है, और मैं इसे कैसे ठीक कर सकता हूं?

उत्तर

9

हां, यह एक ज्ञात आईई व्यवहार है। जब आप जावास्क्रिप्ट से नेविगेट करने का प्रयास करते हैं (स्थान, location.href, location.replace, document.location, history, link.click या form.submit जैसे राउंडबाउट विधियों का उपयोग करके), beforeunload रद्द करना अपवाद उठाएगा।

window.onbeforeunload= function() { return '?'; } 
location.href= 'http://www.example.com/'; 

यह भी, जानबूझकर हो सकता है यह बताने के लिए स्क्रिप्ट पता नेविगेशन का प्रयास विफल, सिवाय त्रुटि नाम तो पूरी तरह से बेकार है कि: परीक्षण मामले के रूप में सरल रूप में है। (मैं "अनिर्दिष्ट त्रुटि" मिलता है।)

पारंपरिक समाधान यह पकड़ने के लिए बस है: हालांकि सभी अपवाद को पकड़ने के रूप में

try { 
    location.href= '...'; 
} catch(e) {} 

मैं हमेशा इस बात का शक कर रहा हूँ आम तौर पर बुरी खबर (लेकिन आईई है आपको केवल इस अपवाद को पकड़ने की अनुमति नहीं देता है ... सटीक स्ट्रिंग के लिए जांचने से छोटा है, जो बहुत ही नाजुक है।

एक और तरीका कॉलिंग कोड पर ऑनबेरनलोड लोड को स्थानांतरित करना है ताकि असली ऑनबेरनलोड कभी न हो और कोई अपवाद नहीं है:

function navigate(url) { 
    if (window.onbeforeunload) { 
     if (confirm(window.onbeforeunload()+' Press OK to continue, or Cancel to stay on the current page.') 
      window.onbeforeunload= ''; 
     else 
      return; 
    } 
    location.href= url; 
} 

हालांकि, जैसा कि लगता है कि समाधान आपके समझ से परे हो सकता है, ऐसा लगता है कि आप जिस फ्रेमवर्क का उपयोग कर रहे हैं वह कोड डालने के बजाय कोड लिख रहा है।

onclick="location.href='/<WhicheverPageYouRequested>.aspx'"; 

यह किस प्रकार का नियंत्रण है? यह ईमानदार होने के लिए खुद को संदिग्ध लग रहा है: निश्चित रूप से आप किसी अन्य पृष्ठ पर जाने के लिए क्लिक करते हैं, इसे एक साधारण लिंक के रूप में चिह्नित किया जाना चाहिए, न कि जावास्क्रिप्ट-ऑनक्लिक तत्व (ये कई तरीकों से गलत हो)। यदि यह एक साधारण गैर-जावास्क्रिप्ट लिंक था तो आपको आईई त्रुटि के बारे में चिंता करने की आवश्यकता नहीं होगी।

संयोग से, आपका पहले से लोड फ़ंक्शन शायद गैर-आईई ब्राउज़र पर असफल हो जाएगा (वापसी वैल्यू केवल आईई-केवल चीज है)। यह थोड़ा अधिक जटिल लगता है ... इसमें क्या गड़बड़ है:

window.onbeforeunload= function() { 
    if(checkIsDirty()) 
     return 'If you continue your changes will not be saved.'; 
} 
संबंधित मुद्दे