2013-02-28 6 views
6

मैं एक जेएस बाहरी स्क्रिप्ट (टैग) बनाना चाहता हूं जो कोड को रोकता है (जो आमतौर पर मेरा नहीं है) जैसे पॉपअप के उपयोग के बिना हो रहा है। मैं जैसी चीजों की कोशिश की:क्या मैं पॉपअप के बिना JS location.href को रोक सकता हूं?

$(window).bind('beforeunload', function() { 
window.stop(); 
event.stopImmediatePropagation(); 
event.preventDefault(); 
location.href = '#'; 
}); 

लेकिन कुछ भी मदद करने के लिए लग रहा था। फिर से, मुझे इसके उपयोग के बिना इसकी आवश्यकता है: वापसी "क्या आप निश्चित हैं?" शायद एक अलग कॉलबैक?

धन्यवाद, दान

+1

संभव नहीं है। उपयोगकर्ता इनपुट के बिना नेविगेशन को रोकने में सक्षम होने से ब्राउजिंग काम करने का तरीका टूट जाएगा। – jbabey

+0

मुझे एक ही भावना है। उदाहरण के लिए फ़ायरफ़ॉक्स में वे जानबूझकर सुरक्षा कारणों से window.location.href ओवरराइडिंग ब्लॉक करते हैं। [बगजिला में यह बग] देखें (https://bugzilla.mozilla.org/show_bug.cgi?id=736694)। – kamituel

+0

असल में यह संभव है। अन्यथा, यदि आप "छोड़ने और परिवर्तन खोना" चाहते हैं तो साइटें मौजूद नहीं होंगी। पहले से लोड होने की घटना मौजूद है और यदि आप बिना सर्फिंग के विंडो को बंद करते हैं तो यह कैच हो जाता है। JQuery कॉलिंग में – Alfabravo

उत्तर

-1

आप उपयोग करना "return false" की कोशिश की थी? इसके अलावा आपको ईवेंट को आपके फ़ंक्शन पर भेजना चाहिए। यहाँ एक उदाहरण है जहाँ आप एक बटन से रोका जा सकता है पर क्लिक करें और हाइपर लिंक

<input type="button" value="click me" /> 
<a href="www.google.com"> google </a> 

$(document).ready(function(){ 
    $('input[type="button"]').click(function(e){ 
      e.preventDefault(); 
    }); 
    $('a').click(function(e){ 
     e.preventDefault(); 

    }); 
}); 
यहाँ

है लिंक http://jsfiddle.net/juTtG/143/

+1

झूठी झूठी झूठी है जैसे e.preventDefault() और e.stopPropagation() .. JQuery जॉन रेसिग के निर्माता द्वारा समझाया गया है: http://www.mail-archive.com/[email protected] .com/msg71371.html और http://jquery.10927.n7.nabble.com/Any-benefit-to-using-event-preventDefault-over-quot-return-false-quot-to-cancel-out-an -फ्रफ-क्लिक-टीडी 102980.html –

+0

इस मामले में झूठी वापसी ("" बिना किसी छेड़छाड़ के), पॉपअप में "वापसी फ्लैश" प्रिंट करता है, यह अजीब है, लेकिन ऐसा होता है, इसलिए यह मेरे लिए अच्छा नहीं है। और मेरे पास इनपुट बटन या एक href नहीं है, मेरे पास एक फ्लैश है (मेरा नहीं) जो जेएस विधि को कॉल करता है जो location.href = 'url' करता है। लेकिन –

+0

दिशा के लिए धन्यवाद क्षमा करें, झूठी झूठी एक बाएं बाहर थी – Nir

1

onbeforeunload उपयोग करने के लिए कहीं और जाएंगे रहा है बस की स्ट्रिंग वापस जाने के लिए पुष्टि करने के लिए सही तरीका है संदेश जो आप दिखाना चाहते हैं। MDN has this to say

समारोह घटना वस्तु की returnValue संपत्ति के लिए एक स्ट्रिंग मान असाइन और एक ही स्ट्रिंग लौटाने यह बाध्यकारी रूप

तो व्यवहार आप के लिए सिर्फ होगा पूछने के लिए अपने onbeforeunload समारोह (समान होना चाहिए jQuery के साथ, अन्य घटनाओं कर की तरह विशेष रूप से onbeforeunload के बाद से कई घटना श्रोताओं का समर्थन नहीं करता)

window.onbeforeunload = function() { 
    return "Are you sure?"; 
}; 

लेकिन विडंबना यह है कि, फायरफॉक्स सुरक्षा उद्देश्यों के लिए इस का समर्थन नहीं करता।

ध्यान दें कि फ़ायरफ़ॉक्स 4 और बाद में लौटाई गई स्ट्रिंग उपयोगकर्ता को प्रदर्शित नहीं होती है। bug 588292 देखें।

संपादित करें: मैंने बग रिपोर्ट को और पढ़ें। इस निर्णय के लिए वे साइट का मुख्य कारण यह है: "1. साइट द्वारा आपूर्ति किए गए टेक्स्ट को हटाएं, क्योंकि यह एक सुरक्षा समस्या है (ब्राउज़र संवाद में अविश्वसनीय पाठ)"। मुझे आश्चर्य है कि वे alert के बारे में कैसा महसूस करते हैं?

अधिकांश आधुनिक ब्राउज़र (क्रोम, आईई 9 + या इससे पहले, और ओपेरा, मुझे निश्चित रूप से पता है) आप किसी भी प्रदर्शन को स्ट्रिंग करने के अलावा onbeforeunload फ़ंक्शन में करने की कोशिश करने वाले किसी भी चीज़ को अनदेखा करेंगे। मैं जाहिरा तौर पर गलत था: यह उपयोगकर्ताओं को ब्राउज़र अपहरण पॉपअप खोलने, उपयोगकर्ता किसी अन्य, संभवतः दुर्भावनापूर्ण डोमेन इंगित करके नेविगेशन प्रयास अधिभावी, आदि

संपादित 2 को रोकने के लिए है। कुछonbeforeunload में चीजों को अस्वीकार कर दिया गया है, वे मुख्य रूप से ईवेंट नमूना और पृष्ठ नेविगेशन के साथ आपके नमूना कोड में किए गए कार्यों के प्रकार होते हैं।एफएफ बग रिपोर्ट के deep in the comments से, उपयोगकर्ता ओसासुमी एफएफ 4+ उपयोगकर्ताओं को कस्टम टेक्स्ट प्रदर्शित करने के लिए आसपास के काम के साथ इस जेएसफ़िल्ड के लिए एक लिंक पोस्ट करता है: http://jsfiddle.net/ecmanaut/hQ3AQ/ तो स्पष्ट रूप से alert() पर कॉल करने की अनुमति है, यहां तक ​​कि onbeforeunload में भी, जो उल्लसित रूप से ठीक से कर रहा है 'बग' "फिक्स" के लिए मूल कारण था: ब्राउज़र/एप्लिकेशन/ओएस/आधिकारिक दिखने वाले संवाद में कस्टम टेक्स्ट प्रदर्शित करना।

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