Quirksmode miał na ten temat post .
Ponieważ strona jest teraz zepsuta i dostępna tylko przez archive.org, odtworzyłem ją tutaj:
Ramki
Na tej stronie przedstawiam krótki przegląd dostępu do ramek iframe ze strony, na której są. Nic dziwnego, że istnieją pewne uwagi dotyczące przeglądarki.
Ramka iframe jest ramką wbudowaną, która mimo że zawiera całkowicie oddzielną stronę z własnym adresem URL, jest jednak umieszczana wewnątrz innej strony HTML. Daje to bardzo ładne możliwości w zakresie projektowania stron internetowych. Problem polega na uzyskaniu dostępu do ramki iframe, na przykład w celu załadowania do niej nowej strony. Ta strona wyjaśnia, jak to zrobić.
Rama czy obiekt?
Podstawowe pytanie dotyczy tego, czy element iframe jest postrzegany jako ramka, czy jako obiekt.
- Jak wyjaśniono na stronie Wprowadzenie do ramek , jeśli używasz ramek, przeglądarka tworzy dla Ciebie (
top.frames[1].frames[2]
i tak dalej) hierarchię ramek . Czy iframe pasuje do tej hierarchii ramek?
- Czy też przeglądarka widzi element iframe jako kolejny obiekt, obiekt, który ma właściwość src? W takim przypadku musimy użyć standardowego wywołania DOM (na przykład,
document.getElementById('theiframe'))
aby uzyskać do niego dostęp. Zasadniczo przeglądarki zezwalają na oba widoki na „prawdziwe” (zakodowane na stałe) iframe, ale generowanych iframe nie można uzyskać jako ramek.
Atrybut NAME
Najważniejszą zasadą jest podanie dowolnego elementu iframe, który utworzysz name
, nawet jeśli używasz również id
.
<iframe src="iframe_page1.html"
id="testiframe"
name="testiframe"></iframe>
Większość przeglądarek potrzebuje tego name
atrybutu, aby element iframe stał się częścią hierarchii ramek. Niektóre przeglądarki (zwłaszcza Mozilla) wymagają, id
aby iframe był dostępny jako obiekt. Przypisując oba atrybuty do elementu iframe, opcje pozostają otwarte. Ale name
jest o wiele ważniejsze niż id
.
Dostęp
Albo uzyskujesz dostęp do iframe jako obiektu i zmieniasz jego, src
albo uzyskujesz dostęp do iframe jako ramki i zmieniasz jego location.href
.
document.getElementById ('iframe_id'). src = 'newpage.html'; frames ['iframe_name']. location.href = 'newpage.html'; Składnia ramki jest nieco lepsza, ponieważ Opera 6 ją obsługuje, ale nie składni obiektowej.
Dostęp do iframe
Aby uzyskać pełną obsługę wielu przeglądarek, należy nadać ramce iframe nazwę i użyć
frames['testiframe'].location.href
składnia. O ile wiem, to zawsze działa.
Dostęp do dokumentu
Dostęp do dokumentu w ramce iframe jest dość prosty, pod warunkiem użycia name
atrybutu. Aby policzyć liczbę łączy w dokumencie w ramce iframe, wykonaj
frames['testiframe'].document.links.length
.
Wygenerowane iframe
Podczas generowania elementu iframe za pośrednictwem DOM W3C element iframe nie jest natychmiast wprowadzany do frames
tablicy, a frames['testiframe'].location.href
składnia nie działa od razu. Przeglądarka potrzebuje trochę czasu, zanim ramka iframe pojawi się w tablicy, czas, w którym żaden skrypt nie może zostać uruchomiony.
document.getElementById('testiframe').src
Składnia działa dobrze w każdych okolicznościach.
target
Atrybutem link nie działa albo z wygenerowanych iframe, z wyjątkiem Opery, choć dałem wygenerowany iframe zarówno name
i id
.
Brak target
wsparcia oznacza, że musisz używać JavaScript do zmiany zawartości generowanego elementu iframe, ale ponieważ i tak potrzebujesz JavaScript, aby go wygenerować, nie widzę w tym większego problemu.
Rozmiar tekstu w ramkach iframe
Ciekawy błąd tylko w Explorer 6:
Po zmianie rozmiaru tekstu za pomocą menu Widok rozmiary tekstu w ramkach iframe są odpowiednio zmieniane. Jednak ta przeglądarka nie zmienia podziałów wierszy w oryginalnym tekście, więc część tekstu może stać się niewidoczna lub mogą wystąpić podziały wierszy, podczas gdy linia może zawierać jeszcze jedno słowo.