2010-09-15 43 views
11

Tôi đang làm việc để thiết lập trang và gặp khó khăn khi làm cho trang web trông đẹp trên các trình duyệt (thực ra chỉ là IE, vì nó hiển thị đúng cho mozilla và webkit). Tôi muốn loại trừ chế độ quirks trước khi nghiêm túc xem xét lỗi IE cũ cố định kể từ IE6. Trang vùng chứa có loại tài liệu được khai báo, tuy nhiên mã iframe thì không. Nội dung khung nội tuyến có được hiển thị ở chế độ quirks (bởi vì chế độ này không có loại tài liệu) hoặc chế độ chuẩn (vì vùng chứa có loại tài liệu) không? Nguồn tin sau chương trình này:Liệu iframe có hiển thị ở chế độ quirks không?

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
... 
<body> 
... 
<iframe ...> 
    <html> 
    <head> 
    ... 
    </head> 
    <body> 
    .... 
    </body> 
    </html> 
</iframe> 
... 
</body> 
</html> 

Trả lời

15

caveat emptor

Như một số người đã buồn bã thất bại trong việc nhận ra câu trả lời này đã được đăng và được chấp nhận trong một thời gian khá dài trước khi IE9 tồn tại mà thay đổi các điều khoản của câu hỏi. Tôi thường sẽ xóa bỏ điều này để tránh bắt được thêm bất kỳ downvotes nào nhưng vì câu trả lời thực sự vẫn đúng và đáng buồn liên quan đến một phần đáng kể nhân khẩu học của trình duyệt, tôi sẽ bỏ nó lại. Chỉ cần xin đừng downvote nó nữa.


Quirksmode: IE làm cho iframe như các nút văn bản riêng, loại tài liệu không được thừa kế, và quirks là mặc định.

Edit: ai đó khác demonstration của vấn đề và bằng chứng về phi thừa kế (với nhờ vào dấu trang của tôi: P) của bạn

Tuy nhiên, bạn đã chọn "Hầu như" như DOCTYPE của bạn có nghĩa iframe không được phép dù sao. Cách duy nhất bạn có thể nhận được iframe hợp lệ là nếu cha mẹ là trong quirks mà làm cho kế thừa hoặc không phải là một điểm tranh luận.

Recommended reading.

+7

sai - như của IE9, DOCTYPE IS thừa hưởng ... nhầm lẫn của bạn bắt nguồn từ thực tế là trong IE8, đây là khác nhau ... –

+1

Đồng ý với Quandary. Tôi có cùng một vấn đề với IE10. Tài liệu gốc đang truyền xuống IFrame bất kể nội dung được chỉ định trong trang đó (trang đó hiển thị khác khi được mở trên chính trang đó). –

+2

"nhầm lẫn" của tôi xuất phát từ thực tế là câu trả lời có trước IE9 nhiều tháng. Điều hữu ích cần làm là chỉnh sửa cho phù hợp, nhưng tôi đoán các downvotes rất thú vị và dễ đọc, và việc đọc là công nghệ. – annakata

23

Trước IE9, trang web trong khung nội tuyến sẽ hiển thị theo loại tài liệu riêng của nó chứ không phải theo loại tài liệu của vùng chứa chính. Tuy nhiên, trong IE9, Microsoft đã thay đổi hành vi để khung nội tuyến con thừa hưởng kiểu tài liệu/kết xuất của nó từ vùng chứa chính.

Lưu ý rằng IE9 sẽ vẫn hoạt động theo cách truyền thống (iframe tôn trọng loại tài liệu riêng của mình) bất cứ khi nào chế độ xem tương thích được sử dụng.

Cách giải quyết tốt nhất cho mọi người trong trường hợp của bạn - viết trang chứa tuân thủ tiêu chuẩn nhưng cần bao gồm khung nội tuyến có trang chế độ quirks - là thêm một trong các thẻ meta sau giữa tài liệu của bạn và thẻ mở trang gốc.

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"> 
<meta http-equiv="X-UA-Compatible" content="IE=8" /> 

Các thẻ này về cơ bản sẽ yêu cầu IE9 giả vờ là IE7 hoặc IE8. Bao gồm trong mô phỏng là logic được sử dụng để xác định chế độ hiển thị cho khung nội tuyến con. Nhược điểm của cách giải quyết này là bạn sẽ không thể sử dụng bất kỳ tính năng mới nào được IE9 hỗ trợ trong trang cha của bạn, nhưng điều đó có lẽ thích hợp hơn với các lỗi dựng hình lớn trong trang con.

Xem http://web.archive.org/web/20110905060718/http://www.sitepoint.com/forums/html-xhtml-52/ie9-iframes-doctypes-you-743000.html để biết thêm thông tin.

+0

là có bất kỳ slution khác cho phép thực hiện cha mẹ IE9 tiêu chuẩn chế độ khung cùng với quirks hoặc EmulateIE7 con iframe? – Tal

+0

@mikepr: Ưu tiên? Không, không phải vậy. Sự thật là, bạn không nên tạo HTML với chế độ quirks - mãi mãi. Một số sản phẩm MS quan trọng làm btw, không có cách giải quyết ... –

+4

Oh và bằng cách này: Dừng upvoting này, nó có vẻ tốt, nhưng nó không hoạt động. –

2

Xem câu trả lời của tôi ở đây để giải quyết MSDN-tài liệu cho IE9: How to force Iframe to run quirks under a standard parent frame

Nói tóm lại, nó không phải là có thể kích hoạt chế độ quirks trong một iframe nếu trang mẹ được vẽ trong chế độ IE9, nhưng nó thể để kích hoạt "mô phỏng chế độ quirks" được nhúng trong công cụ hiển thị IE9.

JSBin demo: http://jsbin.com/ozejuk/1/

Đọc thêm: http://msdn.microsoft.com/en-us/library/gg558056(v=vs.85).aspx

Các vấn đề liên quan