PDA

Просмотр полной версии : SWFObject 2. Не отображает flash при 100% размере


RedGrAg
15.07.2012, 16:46
вот такой код (сгенерированный swfobject_generator_1_2):
<!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></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">
swfobject.registerObject("test", "9.0.0", "expressInstall.swf");
</script>
</head>
<body>
<div>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%" id="test">
<param name="movie" value="test.swf" />
<param name="allowfullscreen" value="true" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="test.swf" width="100%" height="100%">
<param name="allowfullscreen" value="true" />
<!--<![endif]-->
<a href="http://www.adobe.com/go/getflashplayer">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
</a>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
</div>
</body>
</html>
в ff ничего нет, в ie9 100% ширина и фиксированная высота (примерно 200 пикселей)
если задать явный размер, то все отображается нормально

видел похожую тему (http://www.flasher.ru/forum/showthread.php?t=83533&highlight=swfobject+100%25), но не совсем понял, как воспользоваться этим решением (и есть подозрение, что решаться должно по другому как-то)

mooncar
15.07.2012, 17:02
Попробуйте сделать следующее - скачайте свежий SWFObject и опубликуйте флешку с помощью динамического метода.
Вот здесь (http://habrahabr.ru/post/31615/) описано, как (глава "Динамический метод публикации с помощью SWFObject"). С ним никаких проблем не возникало ни в каких браузерах. Кроме IE9 - сказать просто не могу - не было возможности проверить в своих проектах. Но жалоб не поступало.

Вот пример (http://kazan-otdelka.ru/demo/kazanusadba/genplan.htm) одного старого проекта со 100% по ширине и высоте, проверьте как он в IE9 будет. Если ок, возьмите за основу код публикации.


PS. Вообще, подозреваю, что проблема может быть оттого, что 100% высоту не все браузеры могут корректно отразить. То есть <div> с неопределенными размерами (или = 100%) по сути пуст до публикации в нем <object>. Как точно тот или иной браузер производит рендер в этой ситуации, не могу сказать, но как вариант попробуйте задать 100% размеры обрамляющему блоку (в примере выше так и сделано).

RedGrAg
15.07.2012, 19:19
в общем никак не получилось подружить SwfObject2 и 100% (ни статическим ни динамическим методами)
но я нашел у себя версию SwfObject1.5 и там всё работает
пока на этом остановлюсь

похоже что со второй версией нужны дополнительные манипуляции

upd
сразу не увидел, что вы добавили пример
там как-раз SwfObject2.2 и согласно исходному коду, нужно <div> для контента обернуть в еще один <div>, которому мы укажем 100% ширину и высоту
теперь всё работает и со второй версией
спасибо :)

mooncar
15.07.2012, 21:02
Пожалуйста. Замечу только, что в результате конструкция получается точно такая же - один внешний <div> (со 100%) и внутри него будет тот же <object> (который встает на место "внутреннего" <div>). Это легко проверить, проанализировав DOM-структуру результирующей страницы, открытой в браузере.

Krusty
15.07.2012, 21:44
Во второй версии удаляется весь контент, с которым идет связывание, раньше удалялось только содержимое(тот самый вложенный div).

mooncar
15.07.2012, 22:01
удаляется весь контент, с которым идет связывание,

В каком смысле? Я не очень понял, о чем вы, поясните.
Вот исходник страницы:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="ru">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
....
<script type="text/javascript" src="js/swfobject.js"></script>
<script type="text/javascript">
var flashvars = false;
var params = { menu: 'false', allowScriptAccess: 'always', allowFullScreen: 'true', quality: 'high', bgcolor: '#000000', wmode: 'window' };
var attributes = { id:'genplan_object' };
swfobject.embedSWF('flash/genplan.swf', 'genplan', '100%', '100%', '9.0.0', 'flash/expressInstall.swf', flashvars, params, attributes);
</script>

</head>

<body>
<div style="width:100%; height:100%; position:absolute" id="genplan_cont">
<div id="genplan"></div>
</div>
</body>
</html>

Вот получаемая структура:
28214

Внешний <div> - вообще ведь к произвольной верстке относится. Я же сколько угодно могу сделать таких <div>-оберток.

Krusty
16.07.2012, 01:45
<div id=player_container>
ваш браузер не поддерживает flash
</div>

версии до 2.0 удаляют только текст "ваш браузер не поддерживает flash", заменяя его связкой object+embed, а 2.0 удаляет весь контейнер, не только его содержимое.
Вы в примере цепляетесь к вложенному диву "genplan", 2.0 удалит вложенный див "genplan", а 1.5 только добавит в
<div id="genplan"></div>
что полагается, так как он и так пуст(иначе его предварительно очистили бы).

mooncar
16.07.2012, 10:04
Ясно. Так-то да. SWFObject начал использовать с 2.0, так что нюанс этот не сразу понял.