Quirksmode đã có một bài về điều này .
Vì trang hiện đã bị hỏng và chỉ có thể truy cập qua archive.org, tôi đã sao chép nó ở đây:
IFrames
Trên trang này tôi cung cấp một tổng quan ngắn về việc truy cập iframe từ trang họ đang truy cập. Không ngạc nhiên, có một số cân nhắc trình duyệt.
Một iframe là một khung nội tuyến, một khung, trong khi chứa một trang hoàn toàn riêng biệt với URL riêng của nó, dù sao cũng được đặt trong một trang HTML khác. Điều này mang lại khả năng rất tốt trong thiết kế web. Vấn đề là truy cập iframe, ví dụ để tải một trang mới vào đó. Trang này giải thích làm thế nào để làm điều đó.
Khung hay vật?
Câu hỏi cơ bản là liệu iframe được xem như một khung hay là một đối tượng.
- Như đã giải thích trên trang Giới thiệu về khung , nếu bạn sử dụng khung, trình duyệt sẽ tạo cấu trúc phân cấp khung cho bạn (
top.frames[1].frames[2]
và như vậy). Liệu iframe có phù hợp với hệ thống phân cấp khung này không?
- Hay trình duyệt xem iframe chỉ là một đối tượng khác, một đối tượng tình cờ có thuộc tính src? Trong trường hợp đó, chúng tôi phải sử dụng một lệnh gọi DOM tiêu chuẩn (muốn
document.getElementById('theiframe'))
truy cập nó. Trong các trình duyệt chung cho phép cả hai chế độ xem trên các iframe 'thực' (được mã hóa cứng), nhưng các iframe được tạo không thể được truy cập dưới dạng khung.
Thuộc tính NAME
Quy tắc quan trọng nhất là đưa ra bất kỳ iframe nào bạn tạo name
thuộc tính, ngay cả khi bạn cũng sử dụng một id
.
<iframe src="iframe_page1.html"
id="testiframe"
name="testiframe"></iframe>
Hầu hết các trình duyệt cần name
thuộc tính để làm cho phần iframe của phân cấp khung. Một số trình duyệt (đặc biệt là Mozilla) cần id
làm cho iframe có thể truy cập dưới dạng đối tượng. Bằng cách gán cả hai thuộc tính cho iframe, bạn giữ cho các tùy chọn của mình mở. Nhưng name
quan trọng hơn nhiều id
.
Truy cập
Hoặc bạn truy cập iframe dưới dạng đối tượng và thay đổi đối tượng src
hoặc bạn truy cập iframe dưới dạng khung và thay đổi khung location.href
.
document.getEuityById ('iframe_id'). src = 'newpage.html'; khung ['iframe_name']. location.href = 'newpage.html'; Cú pháp khung là hơi thích hợp hơn vì Opera 6 hỗ trợ nó nhưng không phải cú pháp đối tượng.
Truy cập iframe
Vì vậy, để có trải nghiệm trình duyệt chéo hoàn chỉnh, bạn nên đặt tên iframe và sử dụng
frames['testiframe'].location.href
cú pháp. Theo tôi biết điều này luôn luôn hoạt động.
Truy cập tài liệu
Truy cập tài liệu bên trong iframe khá đơn giản, miễn là bạn sử dụng name
thuộc tính. Để đếm số lượng liên kết trong tài liệu trong iframe, hãy làm
frames['testiframe'].document.links.length
.
Tạo iframe
Tuy nhiên, khi bạn tạo iframe thông qua W3C DOM , iframe không được nhập ngay vào frames
mảng và frames['testiframe'].location.href
cú pháp sẽ không hoạt động ngay lập tức. Trình duyệt cần một ít thời gian trước khi iframe xuất hiện trong mảng, thời gian trong đó không có tập lệnh nào có thể chạy.
Các document.getElementById('testiframe').src
cú pháp hoạt động tốt trong mọi hoàn cảnh.
Các target
thuộc tính của một liên kết không hoạt động hoặc với iframe tạo ra, ngoại trừ trong Opera, mặc dù tôi đã tôi tạo iframe cả name
và một id
.
Việc thiếu target
hỗ trợ có nghĩa là bạn phải sử dụng JavaScript để thay đổi nội dung của iframe được tạo, nhưng vì dù sao bạn cũng cần JavaScript để tạo nó ở nơi đầu tiên, nên tôi không thấy vấn đề này nhiều.
Kích thước văn bản trong iframe
Một lỗi chỉ tò mò của Explorer 6:
Khi bạn thay đổi kích thước văn bản thông qua menu Xem, kích thước văn bản trong iframe được thay đổi chính xác. Tuy nhiên, trình duyệt này không thay đổi ngắt dòng trong văn bản gốc, do đó một phần của văn bản có thể trở nên vô hình hoặc ngắt dòng có thể xảy ra trong khi dòng vẫn có thể giữ một từ khác.