IFrames (HTML) ล้าสมัยหรือไม่ [ปิด]


91

ได้รับข้อความที่ขัดแย้งเกี่ยวกับเรื่องนี้หวังว่าจะไม่ ฉันนึกไม่ถึงว่าการสนับสนุนจะหยุดลงเนื่องจากมีเว็บไซต์นับล้าน ๆ แห่งใช้มัน

คำถามเพิ่มเติมเกี่ยวกับเรื่องนี้:

  1. เหตุใดพวกเขาจึงควรยกเลิกแท็กนี้
  2. ทางเลือกอื่นสำหรับมัน?

พวกเขาไม่ล้าสมัย: softwareengineering.stackexchange.com/questions/144515/… . ทางเลือกstackoverflow.com/questions/8702704/…
Michael Freidgeim

มีการอัปเดตเกี่ยวกับเรื่องนี้หรือไม่? คำถามนี้ถูกถามและตอบในปี 2552 ตอนนี้เป็นปี 2020
Kolob Canyon

คำตอบ:


53

ในความคิดของฉันW3C เพิ่มปืนในการทิ้ง iframes จากหลักประเภท Strict HTML และ XHTML ในทางทฤษฎีคุณจะใช้<object>องค์ประกอบเพื่อเพิ่มสิ่งแปลกปลอมลงในเอกสารของคุณ แต่ความแตกต่างและข้อ จำกัด ของเบราว์เซอร์ทำให้สิ่งนี้ไม่เริ่มต้นสำหรับนักพัฒนาหลาย ด้วยมากมากขึ้นในทางปฏิบัติ HTML 5 (ซึ่งยังคงเป็นร่าง) iframe ที่จะกลับมาและได้มีสองคุณลักษณะใหม่และที่รักseamlesssandbox


เยี่ยมมากฉันหวังว่าเบราว์เซอร์จะเริ่มรองรับการอัปโหลดไฟล์ AJAX ดังนั้นเราจึงไม่จำเป็นต้องใช้ iframe หรือแฟลชในการทำเช่นนั้น
Xeoncross

@Xeoncross Firefox และ chrome do: developer.mozilla.org/en/Using_files_from_web_applications
jches

2
อัปเดต: แอตทริบิวต์ semless ถูกลบออกจาก html5 ดู: caniuse.com/#feat=iframe-se seamless
Gabe

76

การสนับสนุน<iframe>ยังมีอยู่ใน HTML 5 ดังนั้นฉันไม่คิดว่าสิ่งนี้จะเปลี่ยนแปลงในอนาคตอันใกล้นี้

เพื่อตอบคำถามอื่น ๆ ของคุณ:

  1. <iframe>s (เป็นเฟรมโดยทั่วไป) ส่วนใหญ่ไม่เป็นมิตรกับผู้ใช้:
    • ไม่อนุญาตให้เข้าถึงเนื้อหาในเฟรมได้ง่ายผ่านทาง URL (โดยไม่สูญเสียเนื้อหานอกเฟรมอย่างน้อยที่สุด)
    • ผู้ใช้"technophobe"ส่วนใหญ่มักจะหงุดหงิดกับเฟรม
    • เท่าที่ฉันรู้ว่าเบราว์เซอร์แสดงผลช้ากว่า
  2. ทางเลือก ได้แก่ การสร้างเพจแบบไดนามิก (SSI, PHP, Rails และอื่น ๆ ) และการใช้ JavaScript / AJAX เพื่อเปลี่ยนเนื้อหาของเช่น a <div>

เพื่อความชัดเจน: ฉันพูดถึง<iframe>ในฐานะองค์ประกอบอินเทอร์เฟซ ไม่ใช่องค์ประกอบที่ซ่อนอยู่สำหรับการโหลดสิ่งอื่น ๆ เช่น Google Mail ทำ


29
+1 สำหรับจุดที่ Google ใช้ iframe เพื่อวัตถุประสงค์เฉพาะทาง
cgp

25

iframe ล้าสมัยสำหรับเค้าโครงเพจ อย่าใช้มันแทนเลย์เอาต์ CSS ที่ดีแม้แต่เลย์เอาต์แบบตารางก็ดีกว่า

เหตุผลที่ดีในการใช้ iframe คือ:

  • โฆษณา : ตัวอย่างเช่น AdWords ใช้เทคนิคนี้เหมาะสำหรับการห่อหุ้ม - โฆษณา css จะไม่ทำลายหน้าเว็บของคุณ
  • iframe ที่ซ่อนอยู่ : สามารถใช้กับสิ่งที่ใช้งานได้หลายร้อยเช่นการติดตาม ajax-Alternative เป็นต้น

35
*** ห้ามใช้ iframes สำหรับ AdWords ถือเป็นการละเมิด TOS *** scribd.com/doc/97655/…
cgp

37
altCognito: AdWords ใช้ iframe ไม่ใช่ฉัน :) ฉันไม่ได้หมายถึงการใส่ adword iframe ลงใน iframe อื่น
นักคิด

7
ฉันรู้ว่ามันเป็นข้อผิดพลาดทั่วไป (ด้วยเหตุนี้บทความทั้งหมด) ดังนั้นฉันจึงต้องการตั้งค่าสถานะเพื่อให้แน่ใจว่าคนอื่นเข้าใจสิ่งที่คุณพูด
cgp

5
iframe เป็นสิ่งที่ต้องทำเมื่อรวมเนื้อหาที่ซับซ้อนซึ่งต้องให้บริการจากโดเมนอื่นและต้องไม่ถูกปรับแต่งด้วยโค้ด CSS หรือ JS ของหน้าปัจจุบัน
vsync

4
สิ่งที่คุณกำลังพูดถึงไม่มีส่วนเกี่ยวข้องกับ iframe ประเด็นคือ - คุณใช้ iframe เพื่อสร้างบริบทการท่องเว็บภายนอกที่ซ้อนกัน คุณไม่ได้ใช้สำหรับ "เค้าโครงหน้า" หากฉันต้องการบริบทการสืบค้นแบบซ้อนฉันจะใช้ "รูปแบบ CSS ที่ดี" แทนได้อย่างไร มันไม่สมเหตุสมผล
Chris B

24

IFrames ไม่ล้าสมัย แต่เหตุผลในการใช้งานนั้นหายาก

เหตุผลในการใช้ iframes:

  • มันยอดเยี่ยมสำหรับการปิดกั้นเนื้อหาของผู้อื่นจากโดเมนอื่น ๆ แต่ก็ไม่ได้รวมเข้าด้วยกันอย่างราบรื่น (สไตล์ชีทจาวาสคริปต์ ฯลฯ ... )
  • บางครั้งการรวมมัลติมีเดียสามารถทำได้ง่ายขึ้นผ่าน iframe ซึ่งต่างจากการใช้แท็กฝัง
  • จริงๆกรณีพิเศษจริงๆเช่นกรณีของ gmail ที่พวกเขาใช้สำหรับการจัดการเสียงและประวัติ

ฉันก็จะตอบว่าไม่จำเป็นต้องลบ iframe มันเป็นแท็กที่จำเป็นและจะอยู่ในช่วงเวลาหนึ่ง


12

ฉันเคยเห็นฟอรัมมากมายที่แนะนำแท็ก Object แทน IFrame ซึ่งอาจใช้ได้ในกรณีส่วนใหญ่

ตัวอย่างเช่นฉันมี PDF ที่แสดงใน IFrame (เนื่องจากมีสิ่งอื่นที่เราต้องแสดงบนหน้านี้นอกจาก PDF เท่านั้น) และสามารถทำให้มันแสดงผลได้ดีโดยใช้ Object

คืออะไร:

<iframe id="confirmed_pdf" class="current_pdf" src="/prescriptions/show_pdf?id=123" height="570" width="480"></iframe>

กลายเป็น:

<object id="confirmed_pdf" class="current_pdf" data="/prescriptions/show_pdf?id=123" type="application/pdf" height="570" width="480">
  <p>[Show this message if displaying the PDF did not work]</p>
</object>

แต่ Object ไม่ใช่ตัวทดแทนที่เหมาะสมในการเติมเต็มข้อกำหนดเพื่อให้พิมพ์ได้เฉพาะส่วน PDF ของหน้า

IFrame เปรียบเสมือนหน้าต่างของตัวเองภายในเพจ (โดยทั่วไปคือหน้าต่างภายในหน้าต่าง) และเมื่อคุณได้รับวัตถุหน้าต่างคุณสามารถเรียก. print () ได้เช่น:

jQuery("#confirmed_pdf").contentWindow.print();

IFrame มีคุณสมบัติ contentWindow นั่นคือสิ่งที่ทำให้การพิมพ์เฉพาะส่วนนั้นทำได้ ออบเจ็กต์ไม่มีคุณสมบัติ contentWindow ดังนั้นจึงไม่มีวิธีที่จะพิมพ์เฉพาะส่วนของหน้า

ดูเหมือนว่าถ้าคุณแค่ใช้ IFrame เพื่อแสดงบางสิ่งก็มีแท็กอื่น ๆ เช่น Object ที่สามารถใช้แทนได้ แต่ถ้าคุณต้องการโต้ตอบกับเนื้อหาของ IFrame ด้วยวิธีใดวิธีหนึ่งอาจจำเป็นต้องใช้ IFrame


7

IFrames ใช้กับ AJAX เป็นจำนวนมาก ตัวอย่างเช่น GMail ใช้ IFrames ที่ซ่อนอยู่เก้ารายการที่ฉันเชื่อ


5
ฉันนับห้า iframe หนึ่งไม่ได้ซ่อนอยู่และในความเป็นจริงหนึ่งในนั้นคือมุมมองเกือบทั้งหมด โดยทั่วไปแล้ว IFrames จะไม่ใช้กับ Ajax (ไม่ได้อยู่ในเฟรมเวิร์กหลัก ๆ ) Gmail ใช้ iframe สำหรับสิ่งต่างๆเช่นการติดตามประวัติเสียง (คี่) และภาพวาดแคนวาสบางประเภท
cgp

ฉันเพิ่งอ่านบทความเมื่อไม่กี่ปีที่ผ่านมา
John Topley

7

IFramesยังไม่ตาย แต่Frameset / Framesกำลังจะตาย

ใน 2 รุ่นล่าสุดของIE (IE7 / IE8) การซูมใน Frames (ไม่ใช่ IFrames) ได้สร้างผลร้าย

โดยทั้งหมดใช้ IFrames แต่ IMHO จะไม่อยู่ใน Framesets / Frames


5

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


Iframes เป็นสิ่งที่จำเป็นในการจัดการกับสิ่งต่างๆที่คุณต้องใส่ในเว็บไซต์ไคลเอนต์ด้วยสไตล์ของคุณเองและ Javascript เพื่อที่รหัสของผู้ใช้จะไม่พัง CSS สามารถลบล้างได้อย่างง่ายดายและ JS อาจทำให้เกิดความขัดแย้งในบางครั้ง (ในบางกรณีที่เกิดขึ้นไม่บ่อย) ดังนั้นวิธีที่ดีที่สุดสำหรับวิธี "ระบบปิด"
vsync

5

อาจมีประโยชน์อย่างยิ่งในบางสถานการณ์ แต่มีจำนวน จำกัด โดยเฉพาะอย่างยิ่งการฝังฟังก์ชันการทำงานทั่วไปในหลาย ๆ ไซต์

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

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

แน่นอนว่าจะมีวิธีอื่นในการทำเช่นนี้ แต่การใช้ iframe นั้นง่ายและมีประสิทธิภาพ และไม่ล้าสมัยอย่างแน่นอน


5

ม้าสำหรับหลักสูตร ... <iframe> ก็เหมือนอย่างอื่น ... เพื่อจุดประสงค์ที่ถูกต้องพวกเขาเป็นเครื่องมือที่เหมาะสม ด้วยจุดประสงค์ที่ไม่ถูกต้องมันเป็นการแฮ็กที่น่าเกลียดหรือแย่กว่านั้น

ใน Ajax <div> s มักเป็นคอนเทนเนอร์ที่เหมาะสมกว่า ในบางสถานที่กิจกรรมการส่งต่อเนื้อหาภายนอกซึ่งเป็นส่วนหนึ่งของไซต์ของคุณเองซึ่งสนับสนุนโดย <iframe> s นั้นไม่เหมาะสม

ทีมของฉันใช้ <iframe> ในวันอื่น ๆ เป็นวิธีที่ดีเยี่ยมในการให้ผู้ใช้เข้าถึงประวัติอีเมล HTML ของพวกเขาอีเมลเป็นหน้า <html> ที่สมบูรณ์ซึ่งเราต้องการแทรกลงในเทมเพลตเว็บของเราได้อย่างง่ายดาย <iframe> เหมาะอย่างยิ่งสำหรับการนำเสนอข้อมูลนั้น] '

ในทางกลับกัน <iframe> s ควรถูกลบหรือปิดใช้งานเกือบตลอดเวลาในเนื้อหาที่ผู้ใช้ส่งซึ่งจะส่งกลับไปที่ไซต์เนื่องจากในบริบทดังกล่าวเป็นปัญหาด้านความปลอดภัยที่สำคัญ


4

ข้อกำหนด Google Gadget ในปัจจุบันอาศัย iframes: http://code.google.com/apis/gadgets/docs/spec.html

ปัจจุบันเป็นวิธีง่ายๆเพียงวิธีเดียวในการแยกแอปจาวาสคริปต์ที่ดึงมาจากหลายโดเมน / ผู้ให้บริการ

นอกจากนี้วิดเจ็ตจำนวนมากที่ผู้ใช้ฝังในเว็บไซต์จากบุคคลที่สามใช้ iframe

แม้ว่าพวกเขาจะมีข้อเสีย แต่ iframe ก็เป็นวิธีแก้ปัญหาที่ใช้งานได้จริงบนเว็บ ฉันต้องเดาว่าพวกเขาจะมาถึงในอีกสักระยะ


2

ฉันเพิ่งเปลี่ยนไซต์จาก Frameset ปกติเป็น Iframes เนื่องจากเฟรมปกติไม่สามารถทำสิ่งที่ฉันต้องการได้ ไม่ทำให้เกิดปัญหากับส่วนที่เหลือของโค้ดเบส


2

ปัญหาด้านการปฏิบัติตามข้อกำหนดและความปลอดภัยยังสามารถผลักดันให้คุณใช้ Iframes รถเข็นช็อปปิ้งเป็นการนำไปใช้งานตาม IFrame ที่ได้รับความนิยมเมื่อคุณต้องการรวมรถเข็นช็อปปิ้งเป็นส่วนหนึ่งของหน้าเว็บบางหน้าโดยไม่ต้องรับผิดชอบทั้งหมดในด้านการประมวลผลการชำระเงิน

โดยทั่วไปแล้วเราจะส่งมอบ Iframe เพื่อผสานรวมข้อมูลอีคอมเมิร์ซและลูกค้าของเราเช่นเดียวกับที่สามารถทำได้


0

ฉันทำงานให้กับ บริษัท ที่ใช้เฟรมสำหรับทุกอย่างตั้งแต่เมนูแบบดึงลงรายการบล็อกเนื้อหาและอื่น ๆ เพื่อปกปิดความซับซ้อนของแบบฟอร์มเว็บ. net แอปพลิเคชันช้ามากและทำงานบน IE เท่านั้น อย่าทำอย่างนี้

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