sự khác biệt giữa các yếu tố iframe, nhúng và đối tượng


179

HTML5 định nghĩa một số yếu tố nội dung được nhúng, theo quan điểm của một con chim, dường như rất giống với điểm giống hệt nhau.

Sự khác biệt thực tế giữa iframe, embedvà là objectgì?

Nếu tôi muốn nhúng tệp HTML từ trang web của bên thứ ba, tôi có thể sử dụng yếu tố nào trong số những yếu tố này và chúng khác nhau như thế nào?


họ không thực sự trông giống hệt nhau cả. trang web của bên thứ ba sẽ là một iframe.
Kai Qing

nhúng với tập hợp con đối tượng: stackoverflow.com/questions/1244788/embed-vs-object , iframe vs tập hợp đối tượng: stackoverflow.com/questions/924946/ ,, vs vs object vs video: stackoverflow.com/questions/11199048/
Ciro Santilli 郝海东 冠状 病 六四 法轮功

1
@KaiQing Cho dù chúng trông giống hệt nhau hay không là ý kiến ​​của bạn, rõ ràng không được OP chia sẻ. Ồ, và nhân tiện, nó cũng không phải là một câu trả lời cho câu hỏi của anh ấy.
Malik A. Rumi

1
@Malik - đó là lý do tại sao nó là một bình luận. Và không, nhìn giống hệt nhau không phải là ý kiến ​​của tôi vì định nghĩa của mỗi loại phác thảo rõ ràng sự khác biệt và khi bạn sẽ sử dụng mỗi cái. Cách chúng xuất hiện ở mặt trước về mặt lý thuyết có thể trông giống hệt nhau nhưng tôi nghĩ bối cảnh của OP là trong cách sử dụng và không xuất hiện. Nhận xét là để minh họa rằng bạn sẽ sử dụng iframe cho bên thứ ba, như họ đã hỏi. Tôi chỉ có thể giả sử rằng tôi đã quá bận rộn để viết ra một câu trả lời đầy đủ sau đó.
Kai Qing

Bây giờ MDN đã có một lời giải thích chi tiết dành cho nhà phát
triển.mozilla.org / en

Câu trả lời:


122

<iframe>

Phần tử iframe biểu thị bối cảnh duyệt web lồng nhau. Tiêu chuẩn HTML 5 - "Phần <iframe>tử"

Chủ yếu được sử dụng để bao gồm các tài nguyên từ các tên miền hoặc tên miền phụ khác nhưng cũng có thể được sử dụng để bao gồm nội dung từ cùng một tên miền. Điểm <iframe>mạnh của mã là mã nhúng là 'sống' và có thể giao tiếp với tài liệu gốc.

<embed>

Được chuẩn hóa trong HTML 5, trước đó nó là một thẻ không chuẩn, được thừa nhận đã được triển khai bởi tất cả các trình duyệt chính. Hành vi trước HTML 5 có thể thay đổi ...

Phần tử nhúng cung cấp một điểm tích hợp cho một ứng dụng bên ngoài (thường không phải là HTML) hoặc nội dung tương tác. ( Tiêu chuẩn HTML 5 - "Phần <embed>tử" )

Được sử dụng để nhúng nội dung cho các plugin trình duyệt. Ngoại lệ cho điều này là SVG và HTML được xử lý khác nhau theo tiêu chuẩn.

Các chi tiết về những gì có thể và không thể được thực hiện với nội dung được nhúng tùy thuộc vào plugin trình duyệt được đề cập. Nhưng đối với SVG, bạn có thể truy cập tài liệu SVG được nhúng từ cha mẹ với nội dung như:

svg = document.getElementById("parent_id").getSVGDocument();

Từ bên trong một tài liệu SVG hoặc HTML được nhúng, bạn có thể tiếp cận cha mẹ với:

parent = window.parent.document;

Đối với HTML nhúng, không có cách nào để lấy tài liệu được nhúng từ cha mẹ (mà tôi đã tìm thấy).

<object>

Phần <object>tử có thể biểu thị một tài nguyên bên ngoài, tùy thuộc vào loại tài nguyên đó, sẽ được coi là một hình ảnh, như một bối cảnh duyệt web lồng nhau hoặc như một tài nguyên bên ngoài được xử lý bởi một plugin. ( Tiêu chuẩn HTML 5 - "Phần <object>tử" )

Phần kết luận

Trừ khi bạn đang nhúng SVG hoặc một cái gì đó tĩnh, bạn có thể sử dụng tốt nhất <iframe>. Để bao gồm sử dụng SVG <embed>(nếu tôi nhớ chính xác, <object>bạn sẽ không cho phép tập lệnh). Thành thật tôi không biết tại sao bạn sẽ sử dụng <object>trừ khi các trình duyệt cũ hơn hoặc flash (mà tôi không làm việc với).

Như đã chỉ ra trong các ý kiến ​​dưới đây; các tập lệnh <object>sẽ chạy nhưng bối cảnh cha mẹ và con không thể giao tiếp trực tiếp. Với <embed>bạn có thể có được bối cảnh của đứa trẻ từ cha mẹ và ngược lại. Điều này có nghĩa là họ có thể sử dụng các tập lệnh trong cha mẹ để thao túng con, v.v. Phần đó không thể thực hiện được <object>hoặc <iframe>ở đó bạn sẽ phải thiết lập một số cơ chế khác thay vào đó, chẳng hạn như API postMessage JavaScript .


4
embedlà lý tưởng để khiến khách truy cập theo dõi chuỗi chuyển hướng có nguồn gốc tại một trang web chặn khung. (Chúng tôi sử dụng nó để khởi động đăng nhập liên kết.)
Đi xe đạp

3
Không đúng về "đối tượng sẽ không cho phép tập lệnh". schepers.cc/svg/blendups/embpping.html
Dzenly

@Dzenly Các tập lệnh được khai báo, ví dụ, và SVG được bao gồm thông qua <object>sẽ chạy, nhưng không thể (hoặc tôi không quản lý) để lấy bối cảnh của đối tượng từ trang mẹ. Vì vậy, các tập lệnh "nội bộ" sẽ chạy, các tập lệnh "bên ngoài", từ quan điểm của đối tượng, không thể giao tiếp với bối cảnh đối tượng.
Jonas Schubert Erlandsson

<embed> thực sự đã lỗi thời. Tôi sẽ không sử dụng nó cho bất cứ điều gì nữa. Ngày nay mọi trình duyệt chính đều có thể sử dụng đối tượng cho mọi plugin có thể. Nếu bạn muốn sử dụng flash và xác định loại của nó thay vì CLSID, nó sẽ hoạt động trong mọi trình duyệt theo cùng một cách. Nó thậm chí có thể chạy các applet java. Tuy nhiên, tôi vẫn sẽ sử dụng iframe để nhúng các trang bên ngoài.
Bachsau

2
@Bachsau vì đây là một cuộc thảo luận về các lựa chọn khác nhau và sự đánh đổi của họ nên cảm thấy sai lầm khi chỉ nói trống rỗng <iframe />là con đường để đi. Toàn bộ điểm của bài viết là tất cả chúng đều khác nhau. <embed>vẫn còn trong thông số: w3.org/TR/html5/embedded-content-0.html#the-embed-element , vì vậy đề cập đến nó là hợp lý. Tôi cũng thấy buồn cười hơn một chút khi bạn cho rằng <embed>đã lỗi thời và đề cập đến các applet Java trong câu tiếp theo :)
Jonas Schubert Erlandsson

28

Một lý do để sử dụng objecttrên iframelà đối tượng tái kích thước nội dung nhúng để phù hợp với kích thước đối tượng. đáng chú ý nhất trên safari trong iPhone 4s có chiều rộng màn hình 320pxvà html từ URL nhúng có thể đặt kích thước lớn hơn.


9
Bạn có thể vui lòng cho biết thêm chi tiết và / hoặc tài liệu tham khảo? Mặt khác, điều này chỉ đủ điều kiện là một nhận xét, không phải là một câu trả lời.
cnst

9
vâng, nhưng đó là một nhận xét hữu ích
Malik A. Rumi

1
Đây là trường hợp sử dụng của tôi, chắc chắn là một bình luận hữu ích tốt. Cảm ơn.
Sid

8
iFrame + iPhone = iHeadache
djvg

4

Một lý do khác để sử dụng objecttrên iframe là objectcác tài nguyên phụ (khi <object>thực hiện HTTPcác yêu cầu) được coi là passive/displayvề mặt Mixed content, điều đó có nghĩa là nó an toàn hơn khi bạn phải có Mixed content.

Nội dung hỗn hợp có nghĩa là khi bạn có httpsnhưng tài nguyên của bạn đến từhttp .

Tham khảo: https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content


Điều đó dường như không phải là trường hợp dựa trên việc đọc hiện tại của bài viết được liên kết, trong đó liệt kê đối tượng theo cả tiêu đề chủ động và thụ động. Bị động: "nguồn phụ (khi <object> thực hiện các yêu cầu HTTP)" / Hoạt động: "<object> (thuộc tính dữ liệu)" (sau này là cách bạn tải một yêu cầu HTTP khác theo câu hỏi ban đầu.
Tim Abell
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.