<embed> a <object>

164

Którego tagu najlepiej użyć w moim pliku HTML, gdy chcę wyświetlić przeglądarkę Adobe PDF?

W tej chwili używam poniższego kodu, ale są dziwne efekty uboczne (np. Wydaje się, że kradnie fokus początkowy, który ustawiłem na inne <input>pole tekstowe; nie wydaje się działać dobrze z klasą jQueryUI Resizeable; itp.)

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

Czy mógłbym zrobić to samo z <object>tagiem? Czy są zalety / wady używania jednego tagu w porównaniu z drugim?

JayhawksFan93
źródło
21
A teraz z <embed> w HTML5? Jaka jest najlepsza droga?
VinnyG
@VinnyG <embed>jest teraz oficjalnie standardowym tagiem z HTML5, ale powinieneś spodziewać się przynajmniej niektórych problemów ze zgodnością ze starszymi wersjami przeglądarek.
b1nary.atr0phy

Odpowiedzi:

169

OBJECT a EMBED - dlaczego nie zawsze używać osadzania?

Konkluzja: OBIEKT jest dobry, WBUDOWANY jest stary. Oprócz tagów PARAM IE, każda zawartość między tagami OBJECT zostanie wyrenderowana, jeśli przeglądarka nie obsługuje wtyczki, do której odwołuje się OBJECT, i najwyraźniej treść otrzymuje żądanie http niezależnie od tego, czy zostanie wyrenderowana, czy nie.

objectto bieżący standardowy znacznik do umieszczania czegoś na stronie. embedzostała uwzględniona przez Netscape (wzdłuż img) zanim cokolwiek jakby objectbyły na w3c umysłu.

W ten sposób dołączasz plik PDF zobject :

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

Jeśli naprawdę potrzebujesz, aby wbudowany plik PDF był wyświetlany w prawie każdej przeglądarce, co rozumieją starsze przeglądarki, embedale nie object, musisz to zrobić:

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

Ta wersja nie sprawdza poprawności .

Esteban Küber
źródło
47
<embed> jest właściwie częścią HTML5 dev.w3.org/html5/spec/Overview.html#the-embed-element
Drew LeSueur
7
Mimo że <embed>jest częścią standardu HTML5, wydaje mi się, że <object>jest to lepszy wybór ze względu na kompatybilność ze starszymi przeglądarkami i możliwość wyświetlania alternatywnych treści. Myśli?
Raphael,
4
@raphaelcm Pozwólcie mi zagrać adwokata diabła. Gdyby utrzymanie zgodności z przestarzałymi przeglądarkami było tak ważne, HTML nigdy by się nie rozwinął. Ważny jest tutaj udział w rynku , szczególnie w odniesieniu do wersji przeglądarek.
b1nary.atr0phy
7
Dlaczego jest to akceptowane? Myślałem, że <embed> to standardowy tag HTML5.
fabspro
2
Myślę, że <embed> będzie lepszym wyborem w przyszłości. Jest w standardzie HTML5, podczas gdy wiele jego funkcji (atrybutów) Object zostało wycofanych, aby oddzielić jego funkcjonalność od tagu embed. w3schools.com/tags/tag_object.asp Wydaje mi się, że tag object jest prawie tagiem „szwajcarskiego scyzoryka”, podczas gdy osadzanie jest przeznaczone do osadzania treści na stronie.
cmaynard
5

Kilka innych opcji:

<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>
aguz
źródło
3

Możesz także użyć metody iframe, chociaż nie jest to kompatybilne z różnymi przeglądarkami (np. Nie działa w Chrome lub Android i prawdopodobnie inne -> zamiast tego wyświetla monit o pobranie). Działa z dataURL i normalnymi adresami URL, nie jestem pewien, czy inne przykłady działają z dataURLS (daj mi znać, czy inne przykłady działają z dataURLS?)

 <iframe class="page-icon preview-pane" frameborder="0" height="352" width="396" src="data:application/pdf;base64, ..DATAURLHERE!... "></iframe>
ejectamenta
źródło
3

Prawdopodobnie najlepszym rozwiązaniem w różnych przeglądarkach do wyświetlania plików PDF na stronach internetowych jest użycie kodu projektu Mozilla PDF.js, można go uruchomić jako usługę node.js i używać w następujący sposób

<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>

Samouczek dotyczący korzystania z pdf.js można znaleźć w tym artykule na blogu ejectamenta

ejectamenta
źródło
1

Osadzenie nie jest standardowym tagiem, chociaż obiekt tak. Oto artykuł, który wygląda na to, że pomoże ci, ponieważ wygląda na to, że sytuacja nie jest taka prosta. Dołączono przykład pliku PDF.

aehlke
źródło
12
Osadzanie wydaje mi się dość standardowe - przynajmniej w HTML5.
kapa
6
@ bažmegakapa Z pewnością jest to obecnie standard w HTML5, ale ten artykuł, do którego się odnosi, został napisany w 2008 roku, a jego odpowiedź pochodzi z 2009 roku, czyli wcześniej niż HTML5.
b1nary.atr0phy
2
@ b1naryatr0phy Dlatego dodałem komentarz. Moim zdaniem powinien zaktualizować lub usunąć odpowiedź, ponieważ nie jest ona już istotna, więc nie pomoże przyszłym odwiedzającym.
kapa