Quirksmode มีโพสต์เกี่ยวกับเรื่องนี้การโพสต์เกี่ยวกับเรื่องนี้
เนื่องจากหน้านี้เสียและสามารถเข้าถึงได้ผ่าน archive.org เท่านั้นฉันจึงทำซ้ำที่นี่:
IFrames
ในหน้านี้ฉันให้ภาพรวมโดยย่อของการเข้าถึง iframes จากหน้าเว็บที่พวกเขาเปิดอยู่ ไม่น่าแปลกใจที่มีข้อควรพิจารณาบางอย่างเกี่ยวกับเบราว์เซอร์
iframe เป็นเฟรมแบบอินไลน์เฟรมที่ในขณะที่มีหน้าที่แยกออกมาอย่างสมบูรณ์พร้อม URL ของตัวเองจะถูกวางไว้ในหน้า HTML อื่น สิ่งนี้ให้ความเป็นไปได้ที่ดีมากในการออกแบบเว็บ ปัญหาคือการเข้าถึง iframe เช่นโหลดหน้าใหม่เข้ามา หน้านี้อธิบายวิธีการทำ
กรอบหรือวัตถุ?
คำถามพื้นฐานคือ iframe ถูกมองว่าเป็นเฟรมหรือเป็นวัตถุ
- ตามที่อธิบายไว้ในหน้าบทนำสู่เฟรมหากคุณใช้เฟรมเบราว์เซอร์จะสร้างลำดับชั้นของเฟรมให้คุณ (
top.frames[1].frames[2]
และเช่นนั้น) iframe เหมาะสมกับลำดับชั้นของเฟรมนี้หรือไม่?
- หรือเบราว์เซอร์เห็น iframe เป็นเพียงวัตถุอื่นวัตถุที่เกิดขึ้นมีคุณสมบัติ src หรือไม่ ในกรณีนี้เราต้องใช้การเรียก DOM แบบมาตรฐาน(เช่น
document.getElementById('theiframe'))
เพื่อเข้าถึง) ในเบราว์เซอร์ทั่วไปอนุญาตให้ใช้มุมมองทั้งสองบน iframes 'ของจริง' (ฮาร์ดโค้ด) แต่สร้าง iframe ไม่ได้เนื่องจากเฟรม
แอตทริบิวต์ NAME
กฎที่สำคัญที่สุดคือการให้ iframe ใด ๆ ที่คุณสร้างแอตทริบิวต์แม้ว่าคุณจะยังใช้name
id
<iframe src="iframe_page1.html"
id="testiframe"
name="testiframe"></iframe>
เบราว์เซอร์ส่วนใหญ่ต้องการname
คุณลักษณะเพื่อให้ iframe เป็นส่วนหนึ่งของลำดับชั้นของเฟรม เบราว์เซอร์บางตัว (โดยเฉพาะ Mozilla) จำเป็นต้องใช้id
เพื่อให้สามารถเข้าถึง iframe เป็นวัตถุได้ ด้วยการกำหนดแอตทริบิวต์ทั้งสองให้กับ iframe ทำให้ตัวเลือกของคุณเปิดอยู่ แต่อยู่ไกลมีความสำคัญมากกว่าname
id
เข้าไป
ไม่ว่าคุณจะเข้าถึง iframe เป็นวัตถุและเปลี่ยนมันsrc
หรือคุณเข้าถึง iframe เป็นเฟรมและเปลี่ยนมันlocation.href
เป็นกรอบและการเปลี่ยนแปลงของ
document.getElementById ('iframe_id'). src = 'newpage.html'; frames ['iframe_name']. location.href = 'newpage.html'; ไวยากรณ์ของเฟรมเป็นที่นิยมมากกว่าเนื่องจาก Opera 6 รองรับ แต่ไม่ใช่ไวยากรณ์ของวัตถุ
การเข้าถึง iframe
ดังนั้นสำหรับประสบการณ์ข้ามเบราว์เซอร์ที่สมบูรณ์คุณควรตั้งชื่อ iframe และใช้
frames['testiframe'].location.href
วากยสัมพันธ์ เท่าที่ฉันรู้ว่าสิ่งนี้ใช้ได้เสมอ
การเข้าถึงเอกสาร
การเข้าถึงเอกสารภายใน iframe นั้นค่อนข้างง่ายหากคุณใช้name
คุณลักษณะนี้ การนับจำนวนของการเชื่อมโยงในเอกสารใน iframe
frames['testiframe'].document.links.length
ที่ทำ
สร้าง iframes
เมื่อคุณสร้าง iframe ผ่านW3C DOMนั้น iframe จะไม่ถูกป้อนเข้าไปในframes
อาร์เรย์ทันทีและframes['testiframe'].location.href
ไวยากรณ์จะไม่ทำงานทันที เบราว์เซอร์ต้องการเวลาเล็กน้อยก่อนที่ iframe จะปรากฎในอาร์เรย์เวลาที่สคริปต์ไม่สามารถทำงานได้
document.getElementById('testiframe').src
ไวยากรณ์ทำงานได้ดีในทุกสถานการณ์
target
แอตทริบิวต์ของการเชื่อมโยงไม่ทำงานทั้งที่มี iframe ที่สร้างยกเว้นในโรงละครโอเปราแม้ว่าฉันให้สร้าง iframe ทั้งฉันและname
id
การขาดtarget
การสนับสนุนหมายความว่าคุณต้องใช้ JavaScript เพื่อเปลี่ยนเนื้อหาของ iframe ที่สร้างขึ้น แต่เนื่องจากคุณต้องการ JavaScript ต่อไปเพื่อสร้างมันขึ้นมาตั้งแต่แรกฉันไม่เห็นปัญหานี้มากนัก
ขนาดตัวอักษรใน iframes
บั๊ก Explorer 6 ที่อยากรู้อยากเห็นเท่านั้น:
เมื่อคุณเปลี่ยนขนาดตัวอักษรผ่านเมนูมุมมองขนาดตัวอักษรใน iframes จะถูกเปลี่ยนอย่างถูกต้อง อย่างไรก็ตามเบราว์เซอร์นี้จะไม่เปลี่ยนตัวแบ่งบรรทัดในข้อความต้นฉบับดังนั้นส่วนหนึ่งของข้อความอาจมองไม่เห็นหรือการแบ่งบรรทัดอาจเกิดขึ้นในขณะที่บรรทัดยังสามารถเก็บคำอื่นได้