Quirksmode имеет сообщение на этом .
Поскольку страница теперь сломана и доступна только через archive.org, я воспроизвел ее здесь:
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 доступным как объект. Присваивая оба атрибута 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
.
Созданные фреймы iframe
Когда вы генерируете iframe с помощью W3C DOM , iframe не сразу вводится в массив frames
, и синтаксис frames['testiframe'].location.href
не будет работать сразу. Браузеру нужно немного времени, прежде чем iframe появится в массиве, время, в течение которого ни один скрипт не может быть запущен.
Синтаксис document.getElementById('testiframe').src
отлично работает при любых обстоятельствах.
Атрибут target
ссылки не работает ни с сгенерированными iframe, кроме как в Opera, хотя я дал своему сгенерированному iframe и name
, и id
.
Отсутствие поддержки target
означает, что вы должны использовать JavaScript для изменения содержимого сгенерированного iframe, но так как вам все равно нужен JavaScript для его генерации, я не вижу в этом особой проблемы .
Размер текста в фреймах
Любопытная ошибка только в Explorer 6:
При изменении размера текста через меню «Вид» размеры текста в фреймах корректно изменяются. Однако этот браузер не изменяет разрывы строк в исходном тексте, поэтому часть текста может стать невидимой или же могут произойти разрывы строк, в то время как строка может содержать еще одно слово.