2010-01-18 1 views
7

Я хотел бы иметь возможность выводить HTML-файл, который включает изображение (внутри самого файла). По Googling, я пришел через пару способов сделать это:Как кодировать данные изображения в HTML-файле?

  • javascript:imageData
  • данных URI, таких как <IMG SRC="data:image/gif;base64,[...]">
  • <object ... > тег (хотя это использует данные URI, поэтому может унаследовать тот же ограничения)

Но я не знаю, что лучше поддерживается браузерами, или если есть другие альтернативы.

Может ли кто-нибудь с практическим опытом этого предложить мне совет? Благодарю.

+1

Другой аналогичный вариант, но не совсем HTML, будет MHTML. http://en.wikipedia.org/wiki/MHTML – bobince

+0

MHTML менее хорошо поддерживается браузерами, но читается Microsoft Word ... может быть, стоит подумать. –

ответ

8

Что касается поддержки браузера от Wikipedia:

URIs данных в настоящее время поддерживаются следующие веб-браузеры:

  • Gecko и его производные, такие как Mozilla Firefox
  • Опера
  • KDE, через систему ввода/вывода KIO. Это позволяет браузеру KDE Konqueror поддерживать URI данных.
  • Safari; хотя движок рендеринга Safari, WebKit, является производным от KHTML-движка Konqueror, Mac OS X не разделяет архитектуру ведомых устройств KIO, поэтому реализации не используются.
  • Safari для iPhone;
  • Google Chrome
  • Internet Explorer 8; По соображениям безопасности Microsoft имеет ограниченную поддержку определенного «не судоходного» контента, например, в тегах и правилах CSS, включая проблемы, связанные с тем, что JavaScript, встроенный в URI данных, не может быть интерпретирован фильтрами сценариев, такими как те, которые используются электронной почтой клиентов. URI данных должны быть меньше 32k.
  • TheWorld Browser; это оболочка браузера IE, который имеет встроенную поддержку URI данных схемы

IE не обрабатывает <object> тег правильно, см here для более подробной информации. Вкратце, вы не можете доверять IE для отображения изображений из него.

javascript:imageData также не поддерживается, так как он используется во многих сценариях межсайтового скриптинга.

Существует много дискуссий о this на web, и все они приходят к выводу, что нет хорошего универсального способа встраивания изображений. Если вам нужно только поддерживать подмножество браузеров, может работать uri данных или комбинация данных uri и javascript.

+0

Означает ли это, что вы предпочитаете метод javascript: imageData? или что существуют ограничения для обоих методов? –

+0

См. Мой выше edit - javascript: imageData, вероятно, является наименее используемым методом, так как многие браузеры исключают векторы для межсайтовых скриптовых атак. – jball

+0

Спасибо, jball - ссылка Tarquin была полезна. –

1

imageData является более гибким, например, некоторые из них ограничивают данные uris до 32k.

1

Данные схемы URI разумна хорошо поддерживается, за исключением Internet Explorer, прежде чем версия 8.

JavaScript URIs, я думаю, немного лучше поддерживается, но потерпеть неудачу, если JS недоступен.

Лучшее, что вы можете сделать, это придерживаться внешних ресурсов изображения.

+0

Должен ли я предоставить оба варианта, с тестом на поддержку JS? –

+0

Вы не можете. Элементы img не поддерживают резервное копирование атрибута src, а элементы объектов плохо поддерживаются (особенно в Internet Explorer). – Quentin

0

Данные URI не будут работать в < IE8. IE8 поддерживает их до 32 КБ.