Каков окончательный способ встраивания файлов Flash (swf) в документы HTML (и XHTML)?
Как и большинство людей, я использую SWFObject для встраивания файлов Flash (swf) в мои веб-проекты.
Как вы знаете SWFObject предлагает два способа встраивания Flash: статическая публикация и динамическая публикация.
Статическая публикация использует регулярную разметку для вставки файла в документ, а также выполняет проверки с помощью JavaScript, которые вы не можете сделать с помощью обычной разметки. Это хорошо, как если бы у вас были клиенты, у которых не может быть включен JavaScript (поисковые системы, некоторые переносные устройства...), файл все равно будет отображаться (если у них установлен правильный плагин Flash). Но если у вас есть люди на устаревшем/непроверенном Internet Explorer (между апрелем 2006 года и апрелем 2008 года), у них будет страшный "клик для активации" на взаимодействуют с Flash.
Динамическая публикация использует JavaScript для встраивания Flash. Это избавит вас от функции "нажмите, чтобы активировать" в старом IE, но если JavaScript выключен, Flash вообще не будет.
Оба метода имеют свои преимущества и неудобства. В утопическом мире мы все будем использовать метод динамической публикации, но мы (или, по крайней мере, некоторые из нас, как я) застряли с клиентами, использующими действительно старые системы с IE 6 (они хотели бы обновить, но они не могут из-за плохого разработанное программное обеспечение, которое будет стоить 10K + $для обновления). Мне нужно поддерживать устаревший IE и вы хотите избавиться от функции "нажмите, чтобы активировать", поддерживая пользователей с отключенным JavaScript.
Как объединить динамические методы публикации static и? Что-то вроде:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>SWFObject 2 static+dynamic publishing example page</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">
swfobject.embedSWF("test.swf", "myContent", "300", "120", "9.0.0", "expressInstall.swf");
</script>
</head>
<body>
<div id="myContent">
<object id="myId" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="300" height="120">
<param name="movie" value="test.swf" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="test.swf" width="300" height="120">
<!--<![endif]-->
<div>
<h1>Alternative content</h1>
<p><a href="#" onclick="location.href='http://www.adobe.com/go/getflashplayer'; return false;"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>
</div>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
</div>
</body>
</html>
Я показал это интегратору, и он сказал мне, что я должен использовать теги <object>
и <embed>
...
Каким будет окончательный способ внедрения Flash в веб-проекты? Решение, которое:
- Работает с выключенным JavaScript (Flash встроен в альтернативный контент)
- Будет проходить валидатор W3C
- Удалит "щелчок для активации" на устаревшем/незагруженном IE
- Будет использовать обнаружение Flash/автоматическую установку SWFObject
EDIT: Добавлена награда. Пожалуйста, я не хочу видеть ответы типа "не беспокойтесь, у меня нет JavaScript с сегодняшнего дня" или "если javascript выключен, скорее всего, Flash тоже не будет".
EDIT 2: Ответ, который я ищу, - это лучший способ встроить Flash статически (с обычными тегами HTML). После этого я добавлю динамическую публикацию. Что-то как это, которое будет работать в всех основных браузерах с IE 6, и это пройдет проверку W3C.
Ответы
Ответ 1
Вот он:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title></title>
<script type="text/javascript" src="swfobject.js"> </script>
<script type="text/javascript">
swfobject.embedSWF('test.swf', 'myFlash', '320', '240', '9.0.0', '/swfobject/expressInstall.swf', 0, 0, 0);
</script>
</head>
<body>
<div>
<object id="myFlash" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="320" height="240">
<param name="movie" value="test.swf">
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="test.swf" width="320" height="240">
<!--<![endif]-->
<p>Version ???</p>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
</div>
</body>
</html>
Ответ 2
<head>
<script src="//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
<script>
var flashVars = {};
var params = {};
params.allowScriptAccess = "always";
params.allowFullScreen = false;
params.bgcolor = "#1a1a1a";
params.wmode = "opaque";
var atts = {};
atts.id = "my-swf";
swfobject.embedSWF("my.swf", "my-swfobject", "100%", "100%", "10.1.0", "playerProductInstall.swf", flashVars, params, atts);
</script>
</head>
<body>
<div id="my-swfobject">
<!-- Any <object></object>, <embed></embed>, and everything else here will be rendered for users without JavaScript. If JavaScript is on, SWFObject will destroy div#my-swfobject and replace it with object#my-swf. -->
</div>
</body>
Сообщите мне, если это то, что вы ищете. При необходимости я могу разработать больше. Вы также можете подумать о том, что ваши подчиненные IE6 устанавливают Google Chrome Frame: http://code.google.com/chrome/chromeframe/
Ответ 3
То, что я делал в прошлом, статически ставит мой flash-контент в div (используя теги объектов и встраивания), а затем SWFObject перезаписывает содержимое этого div при его загрузке. Это будет как можно ближе к тому, что вы хотите сделать, как только сможете.
Ответ 4
Перейдите с динамической публикацией. Если у пользователя отключен javascript, сдайтесь. Они не захотят запускать Flash.
Ответ 5
Есть ли способ заставить ваших клиентов устанавливать другой браузер (например, Firefox) вместе с их старым, и использовать IE6 для устаревшего приложения и FF для вашего?
Ответ 6
Я бы взял реплику с таких сайтов, как YouTube, которые позволяют встраивать Flash. Не уверен, что это будет работать для типов без ролика.
На YouTube:
<object width="[width]" height="[height]">
<param name="movie" value="[Path to SWF]"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<embed src="[Path to SWF]" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="[width]" height="[height]"></embed>
</object>
Ответ 7
единственный способ, который я вижу, делает что-то вроде этого:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>test</title>
</head>
<body>
<p>
<object width="160" height="112" data="movie.swf" type="application/x-shockwave-flash">
<param name="movie" value="movie.swf" />
</object>
</p>
</body>
</html>
нет лучшего варианта, я думаю. это будет работать в браузерах IE, Mozilla и Webkit и имеет значение xhtml. но нет установки вспышки и замены.