Quirksmode ने इस पर एक पोस्ट किया था ।
चूंकि पेज अब टूट गया है, और केवल आर्काइव.ओआरजी के माध्यम से पहुंच योग्य है, मैंने इसे यहां पुन: प्रस्तुत किया:
IFrames
इस पृष्ठ पर मैं उस पृष्ठ से iframes तक पहुँचने का एक संक्षिप्त अवलोकन देता हूँ। आश्चर्य नहीं कि कुछ ब्राउज़र विचार हैं।
एक iframe एक इनलाइन फ़्रेम है, एक फ़्रेम, जो अपने स्वयं के URL के साथ एक पूरी तरह से अलग पृष्ठ होता है, फिर भी इसे किसी अन्य HTML पृष्ठ के अंदर रखा जाता है। यह वेब डिजाइन में बहुत अच्छी संभावनाएं देता है। समस्या आईफ्रेम को एक्सेस करना है, उदाहरण के लिए इसमें एक नया पेज लोड करना। यह पृष्ठ बताता है कि यह कैसे करना है।
फ्रेम या वस्तु?
मूल प्रश्न यह है कि क्या आइफ्रेम को एक फ्रेम के रूप में या एक वस्तु के रूप में देखा जाता है।
- जैसा कि फ़्रेम पेजों के परिचय पर समझाया गया है , यदि आप फ़्रेम का उपयोग करते हैं तो ब्राउज़र आपके लिए एक फ्रेम पदानुक्रम बनाता है (
top.frames[1].frames[2] और ऐसे) । क्या आइफ्रेम इस फ्रेम पदानुक्रम में फिट बैठता है?
- या क्या ब्राउज़र को एक अन्य वस्तु के रूप में एक iframe दिखाई देता है, एक वस्तु जो src संपत्ति के लिए होती है? उस स्थिति में हमें एक मानक DOM कॉल
document.getElementById('theiframe')) का उपयोग करना होगा (जैसे इसे एक्सेस करने के लिए। सामान्य ब्राउज़रों में 'वास्तविक' (हार्ड-कोडित) iframes पर दोनों विचारों की अनुमति है, लेकिन उत्पन्न iframes को फ्रेम के रूप में एक्सेस नहीं किया जा सकता है।
NAME विशेषता
सबसे महत्वपूर्ण नियम किसी भी iframe को देना है जिसे आप एक nameविशेषता बनाते हैं , भले ही आप भी एक का उपयोग करें id।
<iframe src="iframe_page1.html"
id="testiframe"
name="testiframe"></iframe>
अधिकांश ब्राउज़रों nameको फ़्रेम पदानुक्रम के iframe भाग को बनाने के लिए विशेषता की आवश्यकता होती है । कुछ ब्राउज़रों (विशेष रूप से मोज़िला) idको आइफ्रेम को एक वस्तु के रूप में सुलभ बनाने की आवश्यकता है । दोनों विशेषताओं को आइफ्रेम पर असाइन करके आप अपने विकल्पों को खुला रखते हैं। लेकिन nameकहीं अधिक महत्वपूर्ण है id।
पहुंच
या तो आप iframe को एक ऑब्जेक्ट के रूप में एक्सेस करते हैं और उसका परिवर्तन करते हैं srcया आप iframe को एक फ्रेम के रूप में एक्सेस करते हैं और इसे बदलते हैं location.href।
document.getElementById ('iframe_id')। src = 'newpage.html'; फ़्रेम ['iframe_name']। location.href = 'newpage.html'; फ़्रेम सिंटैक्स थोड़ा बेहतर है क्योंकि ओपेरा 6 इसका समर्थन करता है लेकिन ऑब्जेक्ट सिंटैक्स नहीं।
आईफ्रेम तक पहुंचना
तो एक पूर्ण क्रॉस-ब्राउज़र अनुभव के लिए आपको iframe को एक नाम देना चाहिए और उपयोग करना चाहिए
frames['testiframe'].location.href
वाक्य - विन्यास। जहाँ तक मुझे पता है यह हमेशा काम करता है।
दस्तावेज़ तक पहुँचना
दस्तावेज़ को iframe के अंदर एक्सेस करना काफी सरल है, बशर्ते आप nameविशेषता का उपयोग करें । दस्तावेज़ में iframe में लिंक की संख्या की गणना करने के लिए, करें
frames['testiframe'].document.links.length।
जनरेट किए गए आईफ्रेम
जब आप W3C DOM के माध्यम से एक iframe जनरेट करते हैं , iframe को तुरंत framesसरणी में दर्ज नहीं किया जाता है , हालाँकि, और frames['testiframe'].location.hrefसिंटैक्स तुरंत काम नहीं करेगा। यदि सरणी में कोई स्क्रिप्ट नहीं चल सकती है, तो उस समय इर्रैम को बदलने से पहले ब्राउज़र को थोड़ा समय चाहिए।
document.getElementById('testiframe').srcवाक्य रचना सभी परिस्थितियों में ठीक काम करता है।
targetएक लिंक की विशेषता ओपेरा में छोड़कर, उत्पन्न आइफ्रेम के साथ काम नहीं करती है, भले ही मैंने अपना उत्पन्न आइफ्रेम ए nameऔर ए दोनों दिया हो id।
targetसमर्थन की कमी का मतलब है कि आपको उत्पन्न आइफ्रेम की सामग्री को बदलने के लिए जावास्क्रिप्ट का उपयोग करना चाहिए, लेकिन चूंकि आपको इसे पहली बार में उत्पन्न करने के लिए जावास्क्रिप्ट की आवश्यकता है, इसलिए मुझे यह एक समस्या के रूप में नहीं दिखता है।
Iframes में पाठ का आकार
एक जिज्ञासु एक्सप्लोरर 6 केवल बग:
जब आप दृश्य मेनू के माध्यम से पाठ का आकार बदलते हैं, तो iframes में पाठ आकार सही रूप से बदल दिए जाते हैं। हालाँकि, यह ब्राउज़र मूल पाठ में लाइन ब्रेक को नहीं बदलता है, जिससे टेक्स्ट का हिस्सा अदृश्य हो सकता है, या लाइन ब्रेक हो सकता है जबकि लाइन अभी भी किसी अन्य शब्द को पकड़ सकती है।