Как встраивание YouTube работает без classid в теге объекта? - PullRequest
10 голосов
/ 23 августа 2010

Типичный фрагмент кода, полученный с помощью функции вставки YouTube, выглядит следующим образом:

<object width="660" height="405">
  <param name="movie" value="http://www.youtube.com/v/NWHfY_lvKIQ?fs=1&amp;hl=en_GB&amp;border=1"></param>
  <param name="allowFullScreen" value="true"></param>
  <param name="allowscriptaccess" value="always"></param>
  <embed src="http://www.youtube.com/v/NWHfY_lvKIQ?fs=1&amp;hl=en_GB&amp;border=1"
         type="application/x-shockwave-flash" 
         allowscriptaccess="always" 
         allowfullscreen="true" 
         width="660" 
         height="405">
  </embed>
</object>

Теперь элемент <embed> имеет атрибут type, который сообщает браузеру, что он внедряет файл флэш-памяти, но для браузеров, использующих тег <object>, информация, как представляется, недоступна для браузера!

Почему атрибут classid или codebase здесь не требуется? Единственные варианты, которые я могу придумать:

  • IE предполагает Flash-встраивание при отсутствии другой информации
  • или IE считывает эту информацию из тега <embed>

Я не могу найти документацию для проверки того или иного варианта. И мне любопытно!

РЕДАКТИРОВАТЬ: нашел отличное сравнение методов встраивания Flash здесь . Все еще хочу знать, как это работает, хотя ...

Ответы [ 2 ]

5 голосов
/ 23 августа 2010

Я немного поэкспериментировал и обнаружил, что удаление тега <embed> приводит к тому, что IE не встраивает видео. Я был удивлен, что IE использовал тег embed, поэтому углубился в это. Если вы просто хотите узнать ответ, прокрутите вниз «резюме» в конце!

Самое простое, что работало в IE8, это:

<embed src="http://www.youtube.com/v/NWHfY_lvKIQ?fs=1&amp;hl=en_GB&amp;border=1"
         width="660"
         height="405">
 </embed>

Там нет атрибута типа, поэтому браузер должен проверять MIME-тип атрибута src, чтобы выяснить, что делать. Я подтвердил это, передав файл Flash с другим типом MIME - он не будет воспроизводиться, если я не предоставлю атрибут типа application / x-shockwave-flash (это поведение задокументировано для IE здесь )

Конечно, если тег <object> содержит , содержит classid, <embed> будет проигнорировано, чего вы и ожидаете. Я подтвердил это, добавив тег тега embed к другому видео

<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" WIDTH="660" HEIGHT="405" id="adobeWay">
<PARAM NAME=movie VALUE="http://www.youtube.com/v/NWHfY_lvKIQ?fs=1&amp;hl=en_GB&amp;border=1">
<PARAM NAME=quality VALUE=high>
<PARAM NAME=bgcolor VALUE=#FFFFFF>

<embed src="http://youtube.com/v/rIFh1ydXWmg"
         type="application/x-shockwave-flash"
         allowscriptaccess="always"
         allowfullscreen="true"
         width="660"
         height="405">
  </embed>

</OBJECT>

Когда используется тег объекта, плагин Flash не заботится о типе фильма MIME. Я снова подтвердил это, предоставив действительный SWF-файл с другим типом MIME.

Удалите classid из этого последнего теста, и вы получите альтернативное видео в теге <embed>. Это заставляет меня задуматься, зачем вообще нужны теги <param>, если их просто игнорируют при вставке в стиле YouTube.

Краткое описание

Если в <object> нет атрибута classid (или любого другого способа определения необходимого плагина, например атрибута данных), IE отображает все, что может найти внутри тега объекта, что означает, что он будет отображать * Тег 1030 * (IE называет это отступление объекта ). Если этот тег не содержит атрибута type, то тип MIME src используется для определения правильного плагина для использования.

0 голосов
/ 23 августа 2010

Это тип MIME.Он отправляется сервером, чтобы помочь браузеру определить тип контента.MIME-типы связаны с вспомогательными плагинами.

...