क्या आइफ्रेम को 'बुरा व्यवहार' माना जाता है? [बन्द है]


286

कहीं-कहीं लाइन के साथ मैंने यह धारणा उठाई कि इफ्रेम का उपयोग करना 'बुरा व्यवहार' है।

क्या ये सच है? इनका उपयोग करने के पक्ष / विपक्ष क्या हैं?

जवाबों:


217

सभी तकनीकों के साथ, इसके उतार-चढ़ाव हैं। यदि आप एक ठीक से विकसित साइट के आसपास पाने के लिए एक आइफ्रेम का उपयोग कर रहे हैं, तो निश्चित रूप से यह खराब अभ्यास है। हालांकि कभी-कभी एक आइफ्रेम स्वीकार्य होता है।

एक iframe के साथ मुख्य समस्याओं में से एक बुकमार्क और नेविगेशन के साथ करना है। यदि आप इसे अपनी सामग्री के अंदर केवल एक पृष्ठ एम्बेड करने के लिए उपयोग कर रहे हैं, तो मुझे लगता है कि यह ठीक है। यह एक iframe के लिए है।

हालाँकि मैंने देखा है कि आइफ्रेम के साथ भी दुर्व्यवहार हुआ है। इसका उपयोग आपकी साइट के अभिन्न अंग के रूप में नहीं किया जाना चाहिए, बल्कि साइट के भीतर सामग्री के एक टुकड़े के रूप में किया जाना चाहिए।

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

उस के साथ, यदि आप HTML तक सीमित हैं और PHP, ASP.NET आदि जैसे बैकएंड तक कोई पहुंच नहीं है, तो कभी-कभी एक iframe ही आपका एकमात्र विकल्प है।


23
"यदि आप HTML तक सीमित हैं और PHP, ASP.NET आदि जैसे बैकएंड तक कोई पहुंच नहीं है, तो कभी-कभी एक iframe ही आपका एकमात्र विकल्प है" ... यह सच नहीं है। आप jquery ajax के माध्यम से डेटा प्राप्त करके और फिर उस डेटा के साथ एक div पॉप्युलेट करके अपने पेज में बाहरी सामग्री एम्बेड कर सकते हैं।
डेवलपर 2४

53
@ developer747 - यदि समान मूल नीति के कारण बाहरी सामग्री किसी अन्य साइट पर है तो यह काम नहीं करेगा । कुछ अस्पष्ट मामलों में, दूरस्थ साइट JSONP का समर्थन कर सकती है ; लेकिन शायद नहीं।
पीटर वी। मॉरच

2
मुझे लगता है कि iframes पूर्व फ्रेमसेट की तुलना में बहुत कम उपयोगी हैं क्योंकि iframes को उपयोगकर्ता द्वारा पुन: आकार नहीं दिया जा सकता है - लेकिन मैं किसी भी चीज़ के लिए एक फ्रेमसेट का उपयोग नहीं करूंगा, लेकिन एक मैनुअल के बाद से यह html5 में मौजूद नहीं है। उदाहरण: गेम मेकर मैनुअल
डोमिनोज़

15
यह उल्लेख किया जाना चाहिए कि iframes वर्तमान में एक नेस्टेड CSS स्कोप को परिभाषित करने का एकमात्र तरीका है। वे आंतरिक मार्कअप, लेआउट, शैली और जावास्क्रिप्ट * को बाहरी दस्तावेज़ से अलग करते हैं, जो कई उपयोग मामलों और अनुप्रयोगों में उपयोगी है। * जावास्क्रिप्ट को अलग नहीं किया जाता है यदि आंतरिक दस्तावेज़ बाहरी एक के साथ साझा करता है; दूसरी ओर, विभिन्न मूल के दस्तावेज़ अभी भी संचार का उपयोग कर संवाद कर सकते हैं window.postMessage(), उदाहरण के लिए सहयोगी iframe ऑटो-आकार बदलना।
टोबिया

1
इफ्रेम इविल है! के रूप में अच्छी तरह से मदद कर सकते हैं
डेनियल

75

वे बुरा अभ्यास नहीं कर रहे हैं, वे सिर्फ एक और उपकरण हैं और वे लचीलापन जोड़ते हैं।

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

पृष्ठभूमि की घटनाओं की स्क्रिप्टिंग के लिए, चुनाव आम तौर पर एक छिपे हुए iframeऔर XmlHttpRequestवर्तमान पृष्ठ के लिए सामग्री लोड करने के बीच होता है । अंतर यह है कि iframeएक पेज लोड उत्पन्न करता है, इसलिए आप अधिकांश ब्राउज़रों के साथ ब्राउज़र कैश में वापस और आगे बढ़ सकते हैं। ध्यान दें कि Google, जो XmlHttpRequestसभी जगह उपयोग करता है, iframeकुछ मामलों में भी उपयोग करता है ताकि उपयोगकर्ता ब्राउज़र इतिहास में आगे और पीछे जा सके।


11
मुझे लगता है कि यह उल्लेख करना महत्वपूर्ण है कि iframes का उपयोग किसी डोमेन से किसी पृष्ठ को किसी अन्य डोमेन से पृष्ठ में एम्बेड करने के लिए किया जा सकता है। यदि एम्बेडेड पेज कुकीज़ वाले उपयोगकर्ताओं का अनुसरण करना चाहता है और उस जानकारी को होस्ट डोमेन से रखना चाहता है, तो आपका एकमात्र विकल्प एक आइफ्रेम का उपयोग करना है क्योंकि जेएस होस्ट डोमेन के नियंत्रण में है।
निकोलस लियोनार्ड

@NicholasLeonard एक अच्छा उदाहरण यह है कि आप स्थानीय पेज पर आधारित कैश को पेज पर इंडेक्स पेज को स्क्रिप्ट बनाने के लिए उपयोग कर सकते हैं जो कि पता लगाता है कि क्या सबपेज लोकलस्टोरेज में है। उसके बाद, यदि यह वहां है, तो स्थानीय स्तर से डॉक्यूमेंट लिखें। उस उपपृष्ठ में, स्थानीय तत्व में HTML तत्व के बाहरी HTML को संग्रहीत करने के लिए एक स्क्रिप्ट है। वास्तव में इस पद्धति का उपयोग करने का एक अच्छा कारण यह है कि यह आपको लोडिंग स्क्रीन में जोड़ने की अनुमति देता है।

मैं असहमत हूं, लेकिन मैं इसे कम नहीं कर सकता, क्योंकि यह एक महत्वपूर्ण पीओवी है।
विजफुल

28

उनकी कमियों को समझे बिना उनका उपयोग करना 'बुरा व्यवहार' है। Adzm की पोस्ट ने उन्हें बहुत अच्छा बनाया है।

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


18

कई परिस्थितियों में उनके साथ काम करने के बाद, मुझे वास्तव में यह विचार आया है कि iframe की गोटो स्टेटमेंट के बराबर वेब प्रोग्रामिंग है। यही है, आम तौर पर कुछ से बचने के लिए। एक साइट के भीतर वे कुछ हद तक उपयोगी हो सकते हैं। हालांकि, क्रॉस-साइट, वे लगभग हमेशा किसी भी चीज के लिए एक बुरा विचार हैं लेकिन सामग्री का सबसे सरल।

संभावनाओं पर विचार करें ... यदि पैरामीटर सामग्री के लिए उपयोग किया जाता है, तो उन्होंने एक इंटरफ़ेस बनाया है। और एक पेशेवर साइट में, उस इंटरफ़ेस को एक SLA और संस्करण प्रबंधन की आवश्यकता होती है - जिसे ऑनलाइन प्राप्त करने के लिए लगभग हमेशा भीड़ में अनदेखा किया जाता है।

यदि सक्रिय सामग्री के लिए उपयोग किया जाता है - जो स्क्रिप्ट को होस्ट करता है - तो वहाँ (अलग) क्रॉस डोमेन स्क्रिप्ट प्रतिबंध हैं। कुछ को हैक किया जा सकता है, लेकिन शायद ही कभी लगातार। और अगर आपकी तैयार की गई सामग्री को संवादात्मक होने की आवश्यकता है, तो यह फ्रेम से परे ऐसा करने के लिए संघर्ष करेगा।

यदि लाइसेंस प्राप्त सामग्री के साथ उपयोग किया जाता है, तो भाग लेने वाली साइटों को मेजबानों के बीच बैंड से बाहर पात्रता जानकारी को स्थानांतरित करने की आवश्यकता होती है।

इसलिए, हालांकि, साइट के भीतर कभी-कभी उपयोगी होते हैं, लेकिन वे मैशअप के लिए अनुपयुक्त होते हैं। आप असली पोर्टल्स और पोर्ट्लेट्स को देखना बेहतर समझते हैं। इससे भी बदतर, वे हर वेब शौकिया के प्रिय हैं - कई तकनीकी प्रबंधक ने कई समस्याओं के समाधान के रूप में उन पर घेराबंदी की है। वास्तव में, वे अधिक बनाते हैं।


10

मेरे अनुभव के आधार पर iframe के लिए एक सकारात्मक पक्ष तीसरे पक्ष के कोड को कॉल करते समय, इसमें एक जावास्क्रिप्ट को कॉल करना शामिल हो सकता है जो एक Document.write();कमांड को कॉल करता है । जैसा कि आप जानते हैं, इन आदेशों को अतुल्यकालिक रूप से नहीं कहा जा सकता है कि इसे पार्स (डोम पार्सर आदि) कैसे किया जाता है। इसका एक उदाहरण है http://sourceforge.net/projects/phpadsnew/ मैंने अपनी साइट को गति देने में मदद के लिए iframes का उपयोग किया है क्योंकि phpadsnews को कई कॉल आए थे और साइट अलग-अलग रेंडर करने के लिए आगे बढ़ने से पहले प्रतिक्रिया का इंतजार कर रही थी। पृष्ठ के कुछ हिस्से। एक iframe के साथ मैं साइट को पेज के अन्य हिस्सों को रेंडर करने की अनुमति देने में सक्षम था और अभी भी Document.write()phpads की कमांड को अतुल्यकालिक रूप से कॉल करता हूं। रोकना और बंद करना।


8

आइफ्रेम लोगों के लिए निश्चित रूप से उपयोग होता है। आप अपने पृष्ठ पर मौसम नेटवर्क विजेट को और कैसे डालेंगे? एकमात्र तरीका यह है कि उनके एक्सएमएल को पकड़ा जाए और इसे पार्स किया जाए, लेकिन तब निश्चित रूप से आपको मौसम के खराब होने वाले ग्राफिक्स को फेंकने के लिए शर्तों की आवश्यकता होती है ... वास्तव में इसके लायक नहीं है, लेकिन अगर आपके पास समय हो तो क्लीनर को रास्ता दें।


6

मूल फ्रेमसेट मॉडल (फ्रेमसेट और फ्रेम-तत्व) एक प्रयोज्य दृष्टिकोण से बहुत खराब थे। IFrame vas एक बाद के आविष्कार जो मूल फ्रेमसेट मॉडल के रूप में कई समस्याओं के रूप में नहीं था, लेकिन यह इसकी खामी है।

यदि आप उपयोगकर्ता को IFrame के अंदर नेविगेट करने की अनुमति देते हैं, तो लिंक और बुकमार्क अपेक्षा के अनुरूप काम नहीं करेंगे (क्योंकि आप बाहरी पेज के URL को बुकमार्क करते हैं, लेकिन iframe के URL को नहीं)।


1
असहमत हैं ... इस तरह की एक व्यापक टिप्पणी बिल्कुल भी योग्य नहीं है।
दाविसी

5

जब आपका मुख्य पृष्ठ HTTP प्रोटोकॉल में लोड होता है और आपके पृष्ठ के कुछ हिस्सों को HTTPS प्रोटोकॉल में काम करने की आवश्यकता होती है, तो iFrame jsons हाथ नीचे मार सकता है।

विशेष रूप से, यदि आपका डेटाटाइप मूल रूप से json नहीं है और सर्वर पर json में अनुवादित होने की आवश्यकता है और क्लाइंट पर अनुवादित जैसे कि जटिल html में।

तो nope - iFrame बुराई नहीं है।


5

वे खराब नहीं हैं, लेकिन वास्तव में सहायक हैं। मुझे कुछ समय पहले एक बड़ी समस्या थी, जहाँ मुझे अपना ट्विटर फीड एम्बेड करना था और यह सिर्फ md इसे एक ही पेज पर नहीं करने देता था, इसलिए मैंने इसे एक अलग पेज पर सेट किया, और इसे iframe के रूप में रखा।

वे अच्छे भी हैं क्योंकि सभी ब्राउज़र (और फ़ोन ब्राउज़र) उनका समर्थन करते हैं। उन्हें एक बुरा अभ्यास नहीं माना जा सकता है, जब तक कि आप उन्हें सही तरीके से उपयोग नहीं करते हैं।


4

यह ध्यान देने योग्य है कि iframes आपके उपयोगकर्ताओं के इंटरनेट कनेक्शन या iframe की सामग्री की गति की परवाह किए बिना, एक छोटा (0.3 या तो) कारण होगा, लेकिन आपके पृष्ठ डाउनलोड की गति में ध्यान देने योग्य मंदी। यह कुछ ऐसा नहीं है जिसे आप स्थानीय स्तर पर परीक्षण करते समय देखेंगे। वास्तव में, किसी पृष्ठ में जोड़े गए किसी भी तत्व के लिए यह सही है, लेकिन iframes इससे अधिक खराब लगते हैं।


1
क्यों? और क्या उनका तरीका मुख्य पृष्ठ को लोड करने के बाद iframes लोड करने का है?
निकोलस लियोनार्ड

3
मुझे याद नहीं है कि वे इतने धीमे क्यों हैं; मैं एक साल पहले इस पर शोध कर रहा था। शायद इसलिए कि ब्राउज़र आधारभूत रूप से प्रत्येक iframe के लिए एक पूरी तरह से नया प्रतिपादन संदर्भ बना रहा है। पेज लोड पूरा होने तक उन्हें लोड न करने के लिए, आप खाली iframe का उपयोग कर सकते हैं और फिर पेज लोड पूरा होने के बाद iframe का src टैग सेट कर सकते हैं। ध्यान दें, हालांकि, यहां तक ​​कि एक खाली iframe आपके पेज रेंडरिंग को धीमा कर देगा, हालांकि डाउनलोड नहीं, इसलिए चीजें अभी भी आपके उपयोगकर्ताओं के लिए थोड़ी धीमी दिखाई देंगी।
ब्रायन

3
इसके विपरीत, कोई CDN (सामग्री वितरण नेटवर्क) पर चर्चा कर सकता है जब गति और iFrames को संदर्भित करता है। विचार करें कि iFrame संसाधनों को समानांतर में डाउनलोड कर सकता है और इसलिए गति में वृद्धि (ब्राउज़र पर निर्भर करता है) प्रदान करता है। यहां कम से कम एक अन्य संदर्भ है जो मेरी स्थिति से सहमत है। developer.yahoo.com/performance/rules.html
Strixy

2
@Strixy: आपके द्वारा निर्दिष्ट URL बताता है कि IFrames महँगे होने पर भी महंगा है। यह आईफ्रेम के उपयोग को कम करने की सिफारिश करता है। अपनी साइट को गति देने के लिए CDN का उपयोग करना, IFrames का उपयोग करने के लिए रूढ़िवादी है। एक CDN एक IFrame का उपयोग करने की लागत को कम करने में मदद कर सकता है। हालांकि, बिना आइफ्रेम वाला सीडीएन सीडीएन और आईफ्रेम से बेहतर है।
ब्रायन

1
@Strixy: यदि आप समानांतर में संसाधन डाउनलोड करना चाहते हैं, तो इसे करने के बेहतर तरीके हैं। पुरानी हॉटनेस को उस सभी सामान को जावास्क्रिप्ट के माध्यम से लोड करना है। नई हॉटनेस एक सेवा कार्यकर्ता का उपयोग करने के लिए है, जो प्रभावी रूप से आपको सीधे प्रबंधित करने की अनुमति देता है कि क्लाइंट-साइड लॉजिक का उपयोग करके उपयोगकर्ता एजेंट कैसे लोड करता है, प्रीलोड करता है, और साइट संसाधनों को कैश करता है। अन्य नई हॉटनेस http / 2 पुश है, जो आपको ब्राउज़र के लिए ब्राउज़र का इंतजार किए बिना संसाधनों को भेजने की अनुमति देता है। हालाँकि, चूंकि अन्य ब्राउज़र कैश के बाद http / 2 कैश की जाँच की जाती है , इसलिए यह अक्सर इस उद्देश्य के लिए एक खराब विकल्प होता है।
ब्रायन

3

मैंने देखा कि IFRAMEs ने डायनेमिक संदर्भ मेनू बनाने के लिए एक आसान तरीके के रूप में बहुत सफलतापूर्वक लागू किया है, लेकिन उस वेब-ऐप के लक्षित दर्शक केवल इंटरनेट एक्सप्लोरर उपयोगकर्ता थे।

मैं कहूंगा कि यह सब आपकी आवश्यकताओं पर निर्भर करता है। यदि आप यह सुनिश्चित करना चाहते हैं कि आपका पृष्ठ हर ब्राउज़र पर समान रूप से अच्छा काम करे, तो IFRAME से बचें। यदि आप एक संकीर्ण और प्रसिद्ध दर्शकों (जैसे स्थानीय इंट्रानेट पर) को लक्षित कर रहे हैं और आपको IFRAME का उपयोग करने में लाभ दिखाई दे रहा है तो मैं कहूंगा कि ऐसा करना ठीक है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.