<nhúng> so với <đối tượng>


164

Thẻ nào phù hợp / tốt nhất để sử dụng trong tệp HTML của tôi khi tôi muốn hiển thị trình xem Adobe PDF?

Ngay bây giờ tôi đang sử dụng mã bên dưới, nhưng có những tác dụng phụ kỳ lạ (ví dụ: nó dường như đánh cắp trọng tâm bắt đầu mà tôi đã đặt sang một <input>hộp văn bản khác ; nó dường như không chơi tốt với lớp có thể thay đổi jQueryUI; Vân vân.)

<embed src="abc.pdf" type="application/pdf" />

Tôi thậm chí có thể làm điều tương tự với <object>thẻ? Có những lợi thế / bất lợi khi sử dụng một thẻ so với thẻ kia?


21
Và bây giờ với <embed> trong HTML5? cách tốt nhất là gì?
VinnyG

@VinnyG <embed>hiện chính thức là thẻ tiêu chuẩn với HTML5, nhưng bạn nên lường trước ít nhất một số vấn đề tương thích với các phiên bản trình duyệt cũ hơn.
b1nary.atr0phy

Câu trả lời:


169

ĐỐI TƯỢNG so với EMBED - tại sao không luôn luôn sử dụng nhúng?

Điểm mấu chốt: ĐỐI TƯỢNG là tốt, EMBED là cũ. Bên cạnh các thẻ PARAM của IE, mọi nội dung giữa các thẻ OBRI sẽ được hiển thị nếu trình duyệt không hỗ trợ plugin được giới thiệu của OBOG và rõ ràng, nội dung được http yêu cầu bất kể nó có được hiển thị hay không.

objectlà thẻ tiêu chuẩn hiện tại để nhúng một cái gì đó trên một trang. embedđã được Netscape (cùng img) đưa vào trước khi mọi thứ giống như objecttrong tâm trí w3c .

Đây là cách bạn bao gồm một tệp PDF vớiobject :

<object data="data/test.pdf" type="application/pdf" width="300" height="200">
  alt : <a href="data/test.pdf">test.pdf</a>
</object>

Nếu bạn thực sự cần PDF nội tuyến để hiển thị trong hầu hết mọi trình duyệt, vì các trình duyệt cũ hơn hiểu embednhưng không object, bạn sẽ cần phải làm điều này:

<object data="abc.pdf" type="application/pdf">
    <embed src="abc.pdf" type="application/pdf" />
</object>

Phiên bản này không xác nhận .


47
<embed> thực sự là một phần của HTML5 dev.w3.org/html5/spec/Overview.html#the-embed-element
Drew LeSueur

7
Mặc dù <embed>là một phần của tiêu chuẩn HTML5, nhưng đối với tôi, đó <object>là sự lựa chọn tốt hơn vì khả năng tương thích với các trình duyệt cũ hơn và khả năng hiển thị nội dung thay thế. Suy nghĩ?
Raphael

4
@raphaelcm Cho phép tôi chơi người ủng hộ của quỷ. Nếu việc duy trì khả năng tương thích với các trình duyệt lỗi thời là điều quan trọng, HTML sẽ không bao giờ phát triển. Điều quan trọng ở đây là thị phần , đặc biệt liên quan đến các phiên bản trình duyệt.
b1nary.atr0phy

7
Tại sao điều này được chấp nhận? Tôi nghĩ <embed> là thẻ tiêu chuẩn HTML5.
fabspro

2
Tôi nghĩ rằng <embed> sẽ là lựa chọn tốt hơn trong tương lai. Nó nằm trong tiêu chuẩn HTML5 trong khi Object có nhiều tính năng (thuộc tính) không được dùng để tách chức năng của nó khỏi thẻ nhúng. w3schools.com/tags/tag_object.asp Tôi thấy rằng thẻ đối tượng gần như là một thẻ 'con dao quân đội Thụy Sĩ' trong khi nhúng là mục đích được xây dựng để nhúng nội dung vào một trang.
cmaynard

5

Một số tùy chọn khác:

<object type="application/pdf" data="filename.pdf" width="100%" height="100%">
</object>

<object type="application/pdf" data="#request.localhost#_includes/filename.pdf" 
        width="100%" height="100%">
  <param name="src" value="#request.localhost#_includes/filename.pdf">
</object>

3

Bạn cũng có thể sử dụng phương thức iframe, mặc dù điều này không tương thích với trình duyệt chéo (ví dụ: không hoạt động trong crom hoặc android và có thể là các phương thức khác -> thay vào đó nhắc nhở để tải xuống). Nó hoạt động với URLURL và URL thông thường, không chắc các ví dụ khác có hoạt động với dataURLS không (vui lòng cho tôi biết nếu các ví dụ khác hoạt động với dataURLS?)

 <iframe class="page-icon preview-pane" frameborder="0" height="352" width="396" src="data:application/pdf;base64, ..DATAURLHERE!... "></iframe>

3

Có lẽ giải pháp trình duyệt chéo tốt nhất để hiển thị pdf trên các trang web là sử dụng mã dự án Mozilla PDF.js, nó có thể được chạy dưới dạng dịch vụ node.js và được sử dụng như sau

<iframe style="width:100%;height:500px" src="http://www.mysite.co.uk/libs/pdfjs/web/viewer.html?file="http://www.mysite.co.uk/mypdf.pdf"></iframe>

Hướng dẫn về cách sử dụng pdf.js có thể được tìm thấy tại bài viết blog ejectamenta này


1

Nhúng không phải là một thẻ tiêu chuẩn, mặc dù đối tượng là. Đây là một bài viết có vẻ như nó sẽ giúp bạn, vì có vẻ như tình hình không đơn giản như vậy. Một ví dụ cho PDF được bao gồm.


12
Nhúng dường như khá chuẩn đối với tôi - ít nhất là trong HTML5.
kapa

6
@ bažmegakapa Bây giờ chắc chắn là tiêu chuẩn với HTML5, nhưng bài viết mà ông đang đề cập đã được viết lại vào năm 2008 và câu trả lời của ông là từ năm 2009, trước đó là HTML5.
b1nary.atr0phy

2
@ b1naryatr0phy Đó là lý do tôi thêm bình luận. Anh ta nên cập nhật hoặc xóa câu trả lời theo quan điểm của tôi, vì nó không còn phù hợp nữa nên sẽ không giúp khách truy cập trong tương lai.
kapa
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.