ทำไมคนยังใช้ iframe? [ปิด]


89

สำหรับฉัน iframe เป็นสิ่งชั่วร้ายที่บริสุทธิ์ (อาจจะไม่บริสุทธิ์เท่าไหร่) ดูเหมือนว่าพวกเขาจะสร้างปัญหามากมาย ใช่ไซต์ทั้งหมดของคุณจะโหลดหนึ่งครั้งจากนั้นคุณสามารถโหลดได้เพียงหน้าเดียว แต่ผู้คนคิดค้น AJAX เพื่อจุดประสงค์นี้

ปัญหาใหญ่ที่สุดอย่างหนึ่งที่ฉันพบiframeคือฉันไม่สามารถวางลิงก์ไปยังหน้าย่อยใดหน้าหนึ่งได้เนื่องจาก URL ไม่เคยเปลี่ยนแปลง (ใช่ฉันรู้ว่ามีวิธีแก้ปัญหาสำหรับสิ่งนี้) ประการที่สองเครื่องมือค้นหาเว็บอาจมีปัญหาในการจัดทำดัชนีไซต์นั้นอย่างถูกต้อง

บางครั้งการเข้าถึงเว็บไซต์นี้แย่ลงและเบราว์เซอร์บางตัวอาจแสดงผลไม่ถูกต้อง

มีวิธีที่ดีกว่าในการออกแบบเค้าโครงโดยไม่มี (i) เฟรม ทุกวันฉันเห็นบางคนถามคำถาม SO เช่น "จะเข้าถึง iframe ด้วย jQuery ได้อย่างไร"

แล้ว iframe มีประโยชน์อย่างไร? มีเหตุผลอะไรที่จะยังคงใช้มันอยู่? ฉันแค่อยากรู้ว่าทำไม :)

(เนื่องจากไม่ใช่คำถามจริงจึงเป็น CW)


ฉันเห็นด้วยกับ Moshe ข้างต้น การใช้ Iframes อื่น ๆ มีไว้สำหรับ: เว็บไคลเอนต์โบราณที่ไม่รองรับ CSS ที่ทันสมัยหรือในสภาพแวดล้อมที่เป็นกรรมสิทธิ์
Boris Hamanov

วันนี้น่าเสียดายที่ทุกเบราว์เซอร์มีปัญหาความเข้ากันได้! ไม่ได้มาตรฐาน! แท็ก div มีปัญหาแท็กตารางมีปัญหาและอื่น ๆ ... พวกเขาจะเสียเวลาในการออกแบบเว็บไซต์ที่เข้ากันได้ 100% บางครั้งวิธีสุดท้ายในการทำให้เว็บไซต์เข้ากันได้กับ IE7 กำลังใช้ iframe iframe สามารถแก้ไขทุกปัญหา: '(ถ้าคุณตรวจสอบสถานะเว็บไซต์ของฉันคุณจะเห็นการเข้าชมจำนวนมากจาก IE7 ผู้คนจำนวนมากใช้เบราว์เซอร์รุ่นเก่าแม้ในปี 2559 !!!
Mahdi Jazini

คำตอบ:


102

ฉันคิดได้ 2 เหตุผล (ในขณะนี้) ว่าทำไมคนยังคงใช้ iframe แทน AJAX:

1) Iframes หลีกเลี่ยงนโยบายแหล่งกำเนิดข้ามโดเมน (รูปภาพสคริปต์และสไตล์ไม่ได้) สิ่งนี้มีประโยชน์สำหรับการดึงไซต์ / เนื้อหาจากชื่อโดเมนอื่น ๆ อย่างปลอดภัย โดยพื้นฐานแล้วสิ่งนี้ช่วยให้ได้เปรียบในการแสดงข้อมูลจากโดเมนอื่น ๆ ด้วยสายตาโดยไม่ปล่อยให้พวกเขาย่ำไปทั่วหน้าของคุณด้วยการเข้าถึงที่ไม่ จำกัด (เช่น JSONP จะทำได้)

2) คุณสามารถโหลดทรัพยากรได้หลายประเภทจากภายใน iframe ไม่ใช่เฉพาะประเภท mime บางประเภท (คุณค่อนข้าง จำกัด เฉพาะ application / javascript, application / x-javascript, text / css, text / xml, image / png, image / jpeg, รูปภาพ / gif พร้อมสคริปต์, XHR, รูปภาพและแหล่งที่มา) ตัวอย่างเช่นหากฉันต้องการแสดง PDF ให้คุณดูฉันสามารถเปิด iframe และให้ปลั๊กอิน Adobe Reader แสดงไฟล์นั้น นอกจากนี้ในโดเมนเดียวกันถ้าฉันต้องการไปป์ไลน์สคริปต์สไตล์และรูปภาพทั้งหมดเข้าด้วยกัน (แบบอินไลน์ในหน้ารูปภาพจะต้องเป็น URI ข้อมูล) ฉันสามารถทำได้ด้วย iframe (และถ้าเป็นแบบเดียวกัน โดเมนพอร์ตและโปรโตคอลฉันสามารถเข้าถึงได้ด้วย JavaScript เช่นกัน)

คุณทราบหรือไม่ว่า Gmail เป็นชุดของ iframe? ส่วนที่มองเห็นเป็นเพียงการวางตำแหน่งที่ชาญฉลาด นอกจากนี้การติดตั้ง OAuth จำนวนมาก (Twitter, Facebook, Google, Yahoo!) มักใช้ iframe เพื่อเชื่อมโยงผู้ใช้บนโดเมนของตนกับ URL การตรวจสอบสิทธิ์ที่ประสบความสำเร็จ (สำหรับหลังจากผู้ใช้เข้าสู่ระบบ)


2
Re # 1 แต่ส่วนหัว HTTP สามารถบล็อก iframe ได้ .....
Pacerier

2
Re # 2 แต่คุณสามารถทำได้โดยไม่ต้องใช้ iframe เช่น<embed src="http://www.pdf995.com/samples/pdf.pdf" type="application/pdf">
Pacerier

4
Re # 3 สามารถเขียน Gmail ใหม่ได้โดยไม่ต้องใช้ iframe เหตุใดผู้คนจึงยังใช้ iframes สำหรับเบราว์เซอร์สมัยใหม่? คำถามที่ยังไม่มีคำตอบ
Pacerier

22

IFRAME ใช้เพื่อฝังและแยกเนื้อหาของบุคคลที่สามลงในเว็บไซต์

โซลูชันการโฆษณาบนเว็บส่วนใหญ่ใช้ iframes - เนื่องจากให้ความปลอดภัย (นโยบายข้ามโดเมน) และสี่เหลี่ยมผืนผ้าแยกบนหน้าจอซึ่งสามารถจัดการได้อย่างสมบูรณ์โดยเนื้อหาและสคริปต์ของบุคคลที่สาม (กรณีการใช้งานทั่วไปคือโฆษณา)

การใช้ IFRAMES ที่ทันสมัยอีกอย่างหนึ่งคือการจัดการประวัติ (วิธีแก้ปัญหาปุ่มย้อนกลับทั่วไป) ของแอปพลิเคชัน AJAX

FRAMEs เป็น IFRAMES เวอร์ชันที่ไม่ดี การใช้งานของพวกเขากำลังลดลง


1
นี่ง่ายกว่ามากและเป็นตัวอย่างที่ดีของโฆษณา :)
oneworld

15

หากผู้ใช้ปิดใช้งานจาวาสคริปต์ iframe จะทำงานเมื่อ ajax ไม่ทำงาน นี้ไม่ได้ออกจากคำถามพิจารณาว่าคนใช้สิ่งเช่นNoScript


4
นี่เป็นเรื่องจริง แต่การเปลี่ยนแปลง / เพิ่ม / จัดการ iframe ต้องใช้ JavaScript ในกรณีส่วนใหญ่ (ยกเว้น 2 ข้อที่ฉันคิดได้คือลิงก์ไปยังเป้าหมายและ<form>โพสต์ไปยังเป้าหมาย)
Dan Beam

ขวา; แม้ดังนั้นการเปลี่ยนแปลงสิ่งที่จุด iframe ในการใช้ JS XMLHttpRequestมักจะต้องใช้สายหนึ่งเมื่อเทียบกับความซับซ้อนมากขึ้นของ
Reinderien

7

ฉันใช้มันบนเว็บไซต์ ajax เมื่อฉันต้องการอัปโหลดไฟล์โดยไม่ต้องโหลดหน้านี้ซ้ำ


@Mwizak Ajax ควร afaik ครอบคลุมจาวาสคริปต์ทุกประเภทรวมถึงเชิงมุม
CodeReaper

3

ฉันยังคงเห็น iframe ที่ใช้ในองค์กรขนาดใหญ่ที่พวกเขาให้การลงชื่อเพียงครั้งเดียวซึ่งจะฉีดข้อมูลส่วนหัวเกี่ยวกับผู้ใช้ที่ได้รับการพิสูจน์ตัวตนซึ่งจะถูกส่งต่อผ่าน iframe ไปยังแอปพลิเคชันจริง เนื่องจาก "พอร์ทัล" ที่อยู่รอบ ๆ iframe จะจัดการกับรายละเอียดการพิสูจน์ตัวตนที่เฉพาะเจาะจงทั้งหมดที่อยู่เบื้องหลังแอปพลิเคชันเหล่านั้นจึงไม่จำเป็นต้องมีการใช้งานแต่ละรายการทำให้ทีมพัฒนาง่ายขึ้นและมีที่เดียวในการตรวจสอบและปรับรายละเอียดการพิสูจน์ตัวตน ของผู้ใช้


ไม่เห็นสาเหตุที่คุณไม่สามารถเพิ่มส่วนหัวด้วย XMLHttpRequest ( w3.org/TR/XMLHttpRequest/#the-setrequestheader-method ) เว้นแต่โดเมนโปรโตคอลและพอร์ตไม่ตรงกัน (ซึ่งหมายความว่าคุณมีปัญหาที่แตกต่างจาก ส่วนหัว)?
Dan Beam

ประเด็นคือมันเป็น 2 แอพพลิเคชั่นที่แตกต่างกันโดยปกติแล้วจะเป็น 2 เทคโนโลยีที่แตกต่างกันอย่างสิ้นเชิง ระบบจัดการการรับรองความถูกต้องและอีกอันหนึ่งจะจับส่วนหัวที่ฉีดสำหรับตั๋วการตรวจสอบสิทธิ์
Kris van der Mast

3

มีเหตุผลทางเทคนิคมากมายที่จะใช้ (โดยเฉพาะปัญหาด้านความปลอดภัยที่ Dan Beam กล่าวถึง)

สิ่งที่คุณไม่ควรทำคือใช้ iframe“ like frames” นำทางไปยังเพจใหม่โดยอัปเดต iframe เท่านั้น ดังที่คุณกล่าวไว้การทำเช่นนี้จะป้องกันการนำทางจากการบุ๊กมาร์ก / เชื่อมโยงได้ตอบสนองต่อปุ่มการนำทางปกติและการจัดหาลิงค์ที่เป็นประโยชน์เช่นแท็บเปิดในแท็บใหม่

แต่นั่นไม่ใช่เรื่องแปลกสำหรับ iframe ท่านสามารถดูรายละเอียดเพิ่มเติมและหน้าอื่น ๆ ที่ลูกศรจะกระทำโดยการดึงเนื้อหาใหม่ที่มีXMLHttpRequestและการเขียนไปยังเนื้อหาหลักของ innerHTMLdiv บ่อยครั้งสิ่งนี้ทำด้วย jQuery load()และแอนิเมชั่นสไลด์ที่ชาญฉลาด สิ่งนี้ทำให้การนำทางไม่ดีพอ ๆ กับ iframe-used-as-frame หรือเฟรมเซ็ตของโรงเรียนเก่า เป็นเรื่องที่น่าเสียดายที่ผู้เขียนเว็บจำนวนมากใช้กลวิธีนี้โดยเชื่อว่าเป็นวิธีการออกแบบเว็บที่ทันสมัยมากเมื่อเป็นเพียงสกินใหม่บนเฟรมเซ็ตที่ดูหมิ่นเมื่อวานนี้

คุณสามารถหลีกเลี่ยงได้ในทั้งสองกรณี แต่หมายความว่าคุณต้องจัดเก็บ viewstate ใน#ส่วนของตัวระบุส่วนและสนับสนุนการนำทางแฮชที่เหมาะสมซึ่งไม่ใช่เรื่องเล็กน้อย แม้ว่าคุณจะยังคงประสบปัญหากับตัวแทนที่ไม่ใช่ JS เช่นเครื่องมือค้นหา คุณต้องมีการนำทางแบบขนาน?และ#ตามฐานเพื่อรองรับทั้งสองอย่าง มันเป็นความเจ็บปวดและส่วนใหญ่ไม่รำคาญ


รอดู History API ใน HTML5 ซึ่งจะช่วยให้ดึงเนื้อหาโดยไม่ต้องโหลดซ้ำหรือทำลายปุ่มย้อนกลับ / ไปข้างหน้า
Lie Ryan

2

ชุดเฟรมล้าสมัยไปแล้วเมื่อ HTML 5 และบางครั้งคุณจำเป็นต้องมีเฟรมกับไซต์อื่นภายในไซต์ นอกจากนี้ AJAX สามารถทำได้มากเท่านั้น ลองอัปโหลดไฟล์ไปยังไซต์บนโดเมนอื่นผ่าน https โดยไม่ต้องใช้ iframe AJAX จะไม่ช่วยคุณที่นั่น


2

นอกเหนือจากเหตุผลอื่น ๆ แล้วฉันยังมีการใช้งานเฉพาะอย่างหนึ่งiframeในแอปพลิเคชันของฉัน Internet Explorer 6แต่น่าเสียดายที่เบราว์เซอร์เป้าหมายในกรณีของฉันคือ ฉันจำเป็นต้องมีส่วนท้ายและส่วนหัวที่ได้รับการแก้ไขในหน้าเว็บของฉัน ส่วนหลักของหน้านี้สามารถเลื่อนได้

อย่างไรก็ตามมีข้อบกพร่องใน IE6ที่ฉันไม่สามารถแสดงdivองค์ประกอบที่ด้านบนของselectองค์ประกอบโดยใช้z-indexคุณสมบัติ CSS ดังนั้นฉันต้องสร้างสิ่งiframeที่จะใช้เป็นแฮ็กเพื่อหลีกเลี่ยงปัญหานี้

แน่นอนว่านี่เป็นการใช้งานที่เฉพาะเจาะจงiframeและเป็นข้อกังวลเท่านั้นIE6...



1

ฉันกำลังสร้างเครือข่ายโซเชียลและฉันเห็นว่า iframe มีประโยชน์สำหรับวิดเจ็ตที่จะวางบนเว็บไซต์ของคนอื่นเพื่อแสดงเป็นโปรไฟล์ขนาดเล็กหรือรวมเข้ากับเนื้อหาบนเซิร์ฟเวอร์ระยะไกล ดูเหมือนจะเป็นวิธีที่ง่ายที่สุดในการสร้างสิ่งนี้ ฉันรู้ว่าวิดเจ็ตบางตัวใช้ JavaScript นอกจากนี้ด้วยวิธี iframe เซสชันจะเหมือนกับการเยี่ยมชมไซต์เหมือนปกติดังนั้นจึงเหมาะสำหรับปุ่ม like


0

เครื่องมือแก้ไขข้อความที่จัดรูปแบบจำนวนมาก (เช่น TinyMCE, HTMLArea) ถูกนำไปใช้เป็น iframe


นี่เป็นเพราะ FireFox IIRC
alex

0

iFrames ใช้ได้ในบางกรณีเช่นการร้องขอ X-domain หรือการโพสต์ข้อมูลไปยังแหล่งที่มาผ่านพารามิเตอร์ แต่เมื่อฉันต้องการเข้าถึงข้อมูลข้ามโดเมนฉันชอบใช้ไฟล์ CSS - พวกเขาสามารถยอมรับพารามิเตอร์ตั้งค่าคุกกี้เพิ่มเนื้อหาในเพจ (: before &: after) และแสดงความคิดเห็นได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.