webew
Войти » Регистрация
 
HTML

Как встроить флэш-ролик на страницу, поддерживая стандарты?

4 июня 2008, 17:28
Автор: lark
Собственно, вопрос: можно ли встроить флеш на страницу, чтобы страница оставалась валидной?
Код, который предлагается по умолчанию редактором ужасен, что-то вроде:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="100" height="100">
  <param name="movie" value="100x100.swf">
  <param name="quality" value="high">
  <embed src="100x100.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="100" height="100"></embed>
</object>

Часть ошибок удается убрать, просто закрыв <param> слешем.
Но все, что касается <embed> исправить не удается. Если удалить эту строчку вообще, флеш отображается в IE, а в FireFox - нет:(. В опере не проверялось.
Подскажите, пожалуйста, есть ли красивый способ?
Добавить комментарий
Отображение комментариев: Древовидное | Плоское

bur

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

<script type="text/javascript">
//<![CDATA[
document.write('\
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="100" height="100">
\
  <param name="movie" value="100x100.swf" \/>\
  <param name="quality" value="high" \/>\
  <embed src="100x100.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="100" height="100"><\/embed>\
<\/object>');
//]]>
</script>

Несколько важных моментов:
- Строку загоняем в одиночные кавычки, чтобы не экранировать двойные кавычки на значениях атрибутов.
- В конце строки необходимо ставить слеш, давая понять интерпритатору, что строка продолжается.
- Слеши в закрывающих тегах экранируем.

Приведенный пример полностью валиден в XHTML 1.0 Strict.

Из минусов: флеш не будет работать при отключенном JavaScript, но процент таких пользователей меньше тех, у кого нет флеша.
04.06.2008, 18:09
Ответить
NO USERPIC

evgeniy

Лучше уж пусть будет невалидно, чем невалидное запрятаное в скрипт, от этого ничего ведь не меняется, кроме того, что валидатор будет обманут. Следовать духу стандарто важнее чем следовать их букве, ущемить часть пользователей (пусть и небольшую) из-за валидатора сомнительное решение, если не сказать неприемлемое.

>Приведенный пример полностью валиден в XHTML 1.0 Strict.
Валидатор штука тупенькая и ему не догадаться, что пример противоречит самой идее XHTML, идея эта в том, чтобы быть корректным xml и работать по правилам xml, а в xml нет document.write.
Чтобы не быть голословным: http://www.w3.org/MarkUp/2004/xhtml-faq#docwrite
19.06.2008, 02:21
Ответить

bur

Вообще-то задачу можно решать на JavaScript, с выводом через document.write(), но таким, чтобы там содержался полностью валидный код (просто поставить пару ифов, определив тип браузера). Таким образом, будем следовать не только букве, но у духу XHTML :-)

А вот о проценте пользователей без js можно смело забывать. Но даже о них можно позаботиться, прописав <noscript>.
23.06.2008, 12:22
Ответить
NO USERPIC

evgeniy

Насчет document.write()

я как раз и привел ссылку, а по ссылке такой текст:
Does document.write work in XHTML?
No. Because of the way XML is defined, it is not possible to do tricks like this, where markup is generated by scripting while the parser is still parsing the markup.
You can still achieve the same effects, but you have to do it by using the DOM to add and delete elements.
краткий перевод:
Работает ли document.write в XHTML?
Нет. Вместо document.write нужно использовать DOM.

Обычно, конечно, document.write работает в документах с XHTML доктайпом, но это потому, что они отдаются как text/html т.е. в режиме совместимости с html и по сути являются не XHTML, а HTML документами. Как не крути это никак не дух XHTML, а его костыль :)


Теперь к теме топика, по сути проблема решается примерно так, как вы и сказали, но во первых, есть валидная разметка позволяющая внедрять Flash без JS, во вторых есть готовое JS решение решающее еще множество сопутствующих Flash проблем. Я им давно пользуюсь и сегодня перевел документацию, может еще кому понадобиться, это SWFObject 2.


24.06.2008, 00:22
Ответить

bur

За SWFObject спасибо! Встречал как-то этот скрипт, но не думал что это целая библиотека, очень полезно.

Пример со вставкой без JS тоже хорош, только не совсем понятно какие именно проблемы в ИЕ6? У меня всё работает.

Насчет XHTML & document.write() отдельный разговор. Он работает кроссбразуерно, даже при указании XML-совместимых контенттайпов: application/xhtml+xml, application/xml, text/xml. Однако, таким способом добавленные элементы не видны из DOM, что является, конечно, недостатком, но на отображения флешки пользователю не влияет.
24.06.2008, 13:11
Ответить
© 2008—2017 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100

Реклама: