2011-02-28 15 views
7

मैंने इंटरनेट पर इस समस्या से छुटकारा पाने के लिए बहुत कुछ खोजा लेकिन पहले विवरण में चर्चा की जा रही समस्या के बावजूद एक विशिष्ट समाधान नहीं मिला।आईफ्रेम वापस बटन

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

यह व्यवहार वास्तव में परेशान है और मुझे इसे ठीक करने में वास्तविक समस्या है।

मैं फ़ायरफ़ॉक्स का उपयोग कर रहा हूं।

उत्तरों के लिए तत्पर हैं। कृपया मुझे सूचित करें कि मुझे और विवरण देना चाहिए।

धन्यवाद,

उत्तर

3

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

+0

इस बात से सहमत, कुछ भी है कि होगा पीठ के इस व्यवहार को परिवर्तित बल्कि उपयोगकर्ता को भ्रमित करें। –

+0

मैं अधिक संदर्भ प्रदान करूंगा: स्क्रिप्ट एक एक्सटेंशन का हिस्सा है जो सार्वजनिक डोमेन वेबसाइट पर काम करती है। मेरे पास पहले से ही "पिछले पृष्ठ पर वापस" लिंक है लेकिन मैं अभी भी बैक बटन को काम करना चाहता हूं जैसा कि मैंने अपनी पोस्ट में लिखा है। मैं किसी भी तरह ब्राउज़र इतिहास से iframe इतिहास को रद्द या निकालना चाहता हूं लेकिन मुझे यकीन नहीं है कि मैं ऐसा कर सकता हूं? – VJune

+0

एकमात्र तरीका यह है कि आप AJAX का उपयोग अपने फॉर्म मान सर्वर पर पोस्ट करने के लिए कर सकते हैं। इस तरह आप एक पोस्ट बैक से बचें और बैक बटन काम करेगा, आपको सिर्फ पिछले पेज पर ले जाएगा। लेकिन इसमें सर्वर पर डेटा पोस्ट करने के लिए जावास्क्रिप्ट कोडिंग की उचित मात्रा शामिल है और फिर एक वैध प्रतिक्रिया मिलने के बाद फॉर्म फ़ील्ड को छुपाएं। अजाक्स के लिए jQuery का उपयोग करना आपके लिए थोड़ा आसान बना देगा। लेकिन मुझे संदेह है कि आप ब्राउज़र इतिहास को हटा सकते हैं या नहीं। – Arun

3

फ़ायरफ़ॉक्स और आईई वास्तव में आपके जैसा उल्लेख करते हैं, लेकिन क्रोम नहीं करता है, और मुझे लगता है कि अन्य वेबकिट ब्राउज़र भी ऐसा ही करेंगे। क्रोम में, बैक बटन पर क्लिक करने से आप उस स्थान पर उतरेंगे जहां आप जाना चाहते हैं (मूल फ्रेम का पिछला यूआरएल)। यानी क्रोम बैक बटन इतिहास में iframe यूआरएल परिवर्तन नहीं जोड़ना है।

अफसोस की बात है, मुझे आईई और एफएफ को दोहराने के लिए मजबूर करने का कोई तरीका नहीं मिला है, इसलिए मैंने अरुण द्वारा सुझाए गए AJAX पोस्ट दृष्टिकोण का उपयोग किया।

यहाँ मेरी आइफ्रेम स्रोत है, जो jQuery प्रपत्र पोस्ट, और कहा कि पोस्ट का परिणाम के साथ पूरे पृष्ठ बदलने के लिए कर दिया गया है:

<form method="post" onsubmit="postForm(this);return false"> 
    ... 
</form> 

<script type="text/javascript"> 
function postForm(form) { 
    $.post(form.action, $(form).serialize(), postCompleted); 
} 
function postCompleted(data) { 
    $('html').html(data); 
} 
</script> 

यह सभी ब्राउज़रों में काम करता है; बैक बटन पर क्लिक करने से आपको अंतिम उपयोगकर्ता द्वारा देखा गया पिछला यूआरएल वापस भेज दिया जाएगा, बजाय आईफ्रेम में गतिशील रूप से लोड किए गए प्रारंभिक फॉर्म की बजाय।

3

मुझे एक ही समस्या का सामना करना पड़ा: मैं अपने पृष्ठ पर "पॉपअप" दिखाने के लिए गतिशील रूप से बनाए गए आईफ्रेम का उपयोग करता हूं, जिसका एसआरसी किसी दूसरे पृष्ठ पर इंगित करता है जिसमें एक फॉर्म और सबमिट बटन है। उस पृष्ठ को सबमिट करने के बाद, iframe को छिपाने के लिए एक जेएस कॉलबैक का उपयोग किया जाता है। जैसा कि आपने समझाया है, इससे इतिहास में एक नई प्रविष्टि को जोड़ा जा सकता है (कम से कम IE पर)।

लेकिन मुझे पता चला कि डोम से आईफ्रेम तत्व को हटाने (इसे छिपाने के बजाय) अवांछित इतिहास प्रविष्टि को हटाया जा रहा है (IE9 पर परीक्षण किया गया)! उस स्थिति में उपयोगकर्ता क्या अपेक्षा करेगा।

आप स्वयं इस IE9 पर निरीक्षण कर सकते हैं:

  1. ओपन वापस बटन मेनू (राइट क्लिक करें वापस बटन): यदि आप केवल वर्तमान पृष्ठ
  2. प्रेस iframe में प्रस्तुत करने के लिए एक प्रविष्टि है = > वापस बटन मेनू आइफ्रेम
  3. डोम से आइफ्रेम निकालें के लिए एक अतिरिक्त प्रविष्टि से पता चलता => वापस बटन मेनू दिखाई नहीं देता है कि प्रवेश
+0

आईई 8 और फ़ायरफ़ॉक्स 10 पर काम करने का भी परीक्षण किया गया। –

+0

मैं इसमें भाग गया, और इस उत्तर को और भी परिशोधित करने के लिए, ive पाया कि अगर मैं आईफ़्रेम के स्रोत को निर्दिष्ट नहीं करता, तब तक जब तक पैरेंट पेज लोड नहीं हो जाता है, अजीब वापस व्यवहार नहीं होता है। –

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