Quirksmode мав пост про це .
Оскільки сторінка зараз зламана і доступна лише через archive.org, я її відтворив тут:
IFrames
На цій сторінці я даю короткий огляд доступу до iframes зі сторінки, на якій вони перебувають. Не дивно, що є деякі міркування браузера.
Iframe - це вбудований кадр, але кадр, який, хоча містить абсолютно окрему сторінку з власною URL-адресою, все-таки розміщується всередині іншої HTML-сторінки. Це дає дуже приємні можливості в веб-дизайні. Проблема полягає в тому, щоб отримати доступ до iframe, наприклад, завантажити в нього нову сторінку. На цій сторінці пояснено, як це зробити.
Кадр чи об’єкт?
Основоположне питання полягає в тому, чи розглядається iframe як кадр або як об'єкт.
- Як пояснено на вступі до сторінок фреймів , якщо ви використовуєте кадри, браузер створює ієрархію кадрів для вас (
top.frames[1].frames[2]
і таких). Чи входить рамка iframe в цю ієрархію кадрів?
- Або веб-переглядач бачить рамку iframe як просто інший об'єкт, об'єкт, який, мабуть, має властивість src? У цьому випадку ми повинні використовувати стандартний виклик DOM (як,
document.getElementById('theiframe'))
щоб отримати доступ до нього. Загалом, браузери дозволяють обидва погляди на "реальні" (жорстко закодовані) рамки кадрів, але генеровані рамки кадрів не можуть бути доступні як кадри.
Атрибут NAME
Найголовніше правило - надати будь-який iframe, який ви створюєте name
атрибут, навіть якщо ви також використовуєте id
.
<iframe src="iframe_page1.html"
id="testiframe"
name="testiframe"></iframe>
Більшість браузерів потребує name
атрибуту, щоб зробити частину ієрархії кадру iframe. Деякі браузери (зокрема Mozilla) потребують, id
щоб зробити кадр доступним як об’єкт. Призначаючи обидва атрибути iframe, ви зберігаєте свої параметри відкритими. Але name
набагато важливіше, ніж id
.
Доступ
Або ви отримуєте доступ до iframe як об'єкт і змінюєте його, src
або ви отримуєте доступ до iframe як фрейм і змінюєте йогоlocation.href
.
document.getElementById ('iframe_id'). src = 'newpage.html'; фрейми ['iframe_name']. location.href = 'newpage.html'; Синтаксис кадру трохи кращий, тому що Opera 6 підтримує його, але не синтаксис об'єкта.
Доступ до iframe
Отже, для повного крос-браузерного досвіду ви повинні дати ім'я iframe і скористатися
frames['testiframe'].location.href
синтаксис. Наскільки я знаю, це завжди працює.
Доступ до документа
Доступ до документа всередині iframe досить простий за умови використання name
атрибута. Щоб підрахувати кількість посилань документа в iframe, зробіть
frames['testiframe'].document.links.length
.
Породжені рамки кадрів
Коли ви генеруєте iframe через W3C DOM, iframe не відразу вводиться в frames
масив, однак іframes['testiframe'].location.href
синтаксис не працюватиме одразу. Браузеру потрібно трохи часу, перш ніж в масиві з’явиться iframe, час, протягом якого жоден сценарій не може працювати.
The document.getElementById('testiframe').src
Синтаксис відмінно працює в будь-яких обставинах.
target
Атрибут посилання не працює , або з згенерованих фреймів, за винятком Opera, навіть якщо я дав згенерований IFrame як на name
іid
.
Нестача target
підтримки означає, що ви повинні використовувати JavaScript для зміни вмісту створеного iframe, але оскільки для його створення в будь-якому випадку вам потрібен JavaScript, я не вважаю це великою проблемою.
Розмір тексту в рамках
Цікавий помилка Explorer 6:
Коли ви змінюєте розмір тексту через меню «Перегляд», розміри тексту в рамках правильно змінюються. Однак цей веб-переглядач не змінює розривів рядків у початковому тексті, тому частина тексту може стати невидимою, або можуть виникнути розриви рядків, поки рядок все ще може містити інше слово.