<embed> против <object>

164

Какой правильный / лучший тег использовать в моем HTML-файле, когда я хочу отобразить программу просмотра Adobe PDF?

Прямо сейчас я использую приведенный ниже код, но есть странные побочные эффекты (например, кажется, что он украл начальный фокус, который я установил для другого <input>текстового поля; он не очень хорошо работает с классом jQueryUI Resizeable; и т.д.)

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

Могу ли я сделать то же самое с <object>тегом? Есть ли преимущества / недостатки использования одного тега по сравнению с другим?

JayhawksFan93
источник
21
А теперь с <embed> в HTML5? Какой самый лучший способ?
VinnyG
@VinnyG <embed>теперь официально является стандартным тегом для HTML5, но вы должны ожидать, по крайней мере, некоторые проблемы совместимости со старыми версиями браузера.
b1nary.atr0phy

Ответы:

169

OBJECT vs. EMBED - почему не всегда использовать embed?

Итог: OBJECT - это Good, EMBED - это Old. Кроме тегов PARAM в IE, любой контент между тегами OBJECT будет отображаться, если браузер не поддерживает указанный плагин OBJECT, и, очевидно, контент получает HTTP-запрос независимо от того, отображается он или нет.

objectтекущий стандартный тег для вставки чего-либо на страницу. embedбыл включен Netscape (вместе img) до того, как что-то подобное objectбыло на уме w3c .

Вот как вы включаете PDF сobject :

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

Если вам действительно нужен встроенный PDF-файл для отображения практически в каждом браузере, как это понимают старые браузеры, embedно objectвам это не нужно:

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

Эта версия не проверяется .

Эстебан Кюбер
источник
47
<embed> на самом деле является частью HTML5 dev.w3.org/html5/spec/Overview.html#the-embed-element
Drew LeSueur
7
Несмотря на то, что он <embed>является частью стандарта HTML5, мне кажется, что <object>это лучший выбор из-за совместимости со старыми браузерами и возможности отображения альтернативного контента. Мысли?
Рафаэль
4
@raphaelcm Позволь мне сыграть адвоката дьявола. Если поддержание совместимости с устаревшими браузерами имеет такое большое значение, HTML никогда не будет развиваться. Здесь важна доля рынка , особенно в отношении версий браузера.
b1nary.atr0phy
7
Почему это принято? Я думал, что <embed> был стандартным тегом HTML5.
Fabspro
2
Я думаю, <embed> будет лучшим выбором в будущем. Он соответствует стандарту HTML5, в то время как в Object многие его функции (атрибуты) устарели, чтобы отделить его функциональность от тега embed. w3schools.com/tags/tag_object.asp Мне кажется, что тег объекта - это почти тег «швейцарского армейского ножа», в то время как embed специально создан для встраивания контента в страницу.
cmaynard
5

Некоторые другие варианты:

<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
источник
3

Вы также можете использовать метод iframe, хотя он не совместим с разными браузерами (например, не работает в chromium или android и, возможно, другие -> вместо этого предлагает загрузить). Он работает с dataURL и обычными URL, не уверен, что другие примеры работают с dataURLS (пожалуйста, дайте мне знать, если другие примеры работают с dataURLS?)

 <iframe class="page-icon preview-pane" frameborder="0" height="352" width="396" src="data:application/pdf;base64, ..DATAURLHERE!... "></iframe>
ejectamenta
источник
3

Вероятно, лучшим кросс-браузерным решением для отображения PDF на веб-страницах является использование кода проекта Mozilla PDF.js, его можно запустить как сервис node.js и использовать следующим образом.

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

Учебное пособие по использованию pdf.js можно найти в этой статье блога ejectamenta

ejectamenta
источник
1

Embed не является стандартным тегом, хотя object является. Вот статья, которая выглядит так, как будто она вам поможет, поскольку кажется, что ситуация не так проста. Пример для PDF включен.

aehlke
источник
12
Мне кажется, Embed вполне стандартен - по крайней мере, в HTML5.
Капа
6
@ bažmegakapa Это, конечно, сейчас стандартно для HTML5, но эта статья, на которую он ссылается, была написана еще в 2008 году, а его ответ - с 2009 года, предшествующего HTML5.
b1nary.atr0phy
2
@ b1naryatr0phy Вот почему я добавил комментарий. Он должен либо обновить, либо удалить ответ, на мой взгляд, так как он больше не актуален, поэтому не поможет будущим посетителям.
Капа