2011-10-12 18 views
9

जब कोई पृष्ठ # में समाप्त होने वाले यूआरएल के साथ आईफ्रेम लोड करता है, तो मूल पृष्ठ स्क्रॉल करता है ताकि आईफ़्रेम का शरीर ब्राउज़र विंडो के शीर्ष पर हो।ब्राउज़र विंडो को स्क्रॉल करने से एक आईफ्रेम में # एंकर को रोकें

डेमो: यूआरएल समाप्त होता है http://jsfiddle.net/dTQEE/1/

तो # में, उदाहरण के लिए http://foo.com#, ब्राउज़र मानता है कि आप पृष्ठ के शीर्ष पर जाना चाहते हैं।

हेश खंड के साथ आईफ्रेम लोड होने पर आप मूल विंडो को स्क्रॉल करने से कैसे रोकते हैं?

क्रोम में समस्या होती है, यह सुनिश्चित नहीं है कि यह अन्य ब्राउज़रों में कोई समस्या है या नहीं।

अभी सबसे अच्छा समाधान मैं el.addEventListener('scroll', ...) का उपयोग करने के लिए 0 करने के लिए scrollTop पुनर्स्थापित करने के लिए यदि वह पहले से 0. यह काम करता है नहीं है, लेकिन नीचे स्क्रॉल और स्क्रॉल ऊपर दोनों बहुत ध्यान देने योग्य हैं।

+1

आप फ्रेम के लिए यूआरएल कैसे प्राप्त कर रहे हैं? क्या इसे लोड करने से पहले जांचना/संपादित करना संभव नहीं है? – sdleihssirhc

+1

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

+0

क्या यह आपके लिए कभी हल किया गया था? –

उत्तर

0

यह सुनिश्चित नहीं है कि यह संभव है, लेकिन आपको window.onhashchange ईवेंट में टैप करने और डिफ़ॉल्ट को रोकने की कोशिश करनी चाहिए। यदि नहीं, तो आपको हैश को तोड़ना होगा यदि इसका कुछ भी पालन नहीं किया जाता है।

+0

धन्यवाद - मैंने पहले कोशिश की थी। जब पृष्ठ का हैश बदलता है तो ऑनशैशचेंज केवल निकाल दिया जाता है, इसलिए इसे लोड पर नहीं निकाल दिया जाता है। –

+0

कम से कम क्रोम में, (अन्य ब्राउज़रों के बारे में निश्चित नहीं है), ऑनशैशचेंज ईवेंट को रद्द करने योग्य सेट को गलत पर सेट किया गया है, इसलिए आप ईवेंट पर preventDefault का उपयोग नहीं कर सकते हैं। –

0

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मैं उसी समस्या के लिए अपनी खोज में आया। मैं बस एक समाधान के साथ आया जो क्रोम में मेरे लिए अद्भुत काम करता है।

<a href="dummylink.html" onclick="someFunction(); return false;"> 

href लिंक स्थिति पट्टी के लिए प्रयोग किया जाता है, लेकिन अंत में return false; की वजह से, यह वास्तव में कहीं भी जाने नहीं देता है। फिर, आप अपने रीडायरेक्शन (मेरे मामले में यह document.formName.submit(); था) अपने someFunction(); के अंदर बस करें। हालांकि इसके बारे में सोचने के लिए आओ, आप सबकुछ इनलाइन कर सकते हैं, लेकिन यह वास्तव में अच्छा प्रतीत नहीं होता है जब तक कि आपके पास केवल एक चीज न हो।

नोट: यदि आपका someFunction(); अंत में return false; है, कि कूद को रोकने के लिए पर्याप्त नहीं होगा।

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

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