Каков окончательный способ встраивания файлов 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. но нет установки вспышки и замены.