Модераторы: Illuminaty
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Внедрение flash на страницу. 
:(
    Опции темы
ksnk
Дата 30.5.2009, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



С некоторых пор перешел на более компактный вид кода-внедрения. Где нашел - не скажу, склероз заставляет часть памяти хранить в Гугле... Если выдернуть этот вид  из шаблона - получится такое
компактный шаблон flash
Код

<object type="application/x-shockwave-flash"
data="img/{swf}.swf" width="{width}" height="{height}">
<param name="wmode" value="transparent">
<param name="movie" value="img/{swf}.swf" >
</object>
 В фигурных кавычках - приходящие снаружи шаблона параметры.
Совершенно замечательный, кроссброузерный и компактный... Не мог нарадоваться, до тех пор, пока не появилась надобность по клику на банер переходить на какой-то раздел сайта. Казалось бы нет проблем:
Код

<div onclick="location='another/link/page.php'">
{::flash:rolik:233x100}
</div>
 В фигурных скобках вызывается тот самый шаблон flash и ему приходит swf=rolik, width=233 и height=100. 

НО! 

В IE 7 не работает такой переход. не знаю по какой причине. Может автор ролика навернул обработку-чистку кликов, может неудачное расположение звезд... В FireFox'е - работает. 

Методом внезапного просветления, вернул более старый шаблон
старый шаблон flash
Код

<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
width="{width}" height="{height}">
<param name="wmode" value="transparent">
<PARAM NAME=movie VALUE="img/{swf}.swf">
<PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#FFFFFF>
<EMBED src="img/{swf}.swf" wmode="transparent"
quality=high bgcolor=#FFFFFF
width="{width}" height="{height}"
NAME="mtown" ALIGN="" TYPE="application/x-shockwave-flash"
PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">
</EMBED>
</OBJECT>
 И, "О чудо", оно заработало. Как впрочем и ожидалось, ибо на этаком монстре такое уже проверялось...

Собственно вопрос. А чего это "новая" компактная форма записи так погано себя ведет в отношении кликов юзера? В каждом случае магический параметр wmode="transparent" был установлен...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
youri
Дата 1.6.2009, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: 5
Всего: 16



а у меня и со старым шаблоном не заработало в ie (6, 7). А разве должно было?  smile 
PM   Вверх
ksnk
Дата 1.6.2009, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Если заменить onclick на onmousedown - все работает.
Код

<div onmousedown="alert('hello!')">
{::flash:rolik:233x100}
</div>
 
 Попробовал смастеить тестовый пример с обоими "шаблонами вывода". И на обоих примерах оно работает ...
Мистика. 
Осталось только понять почему перестает работать на сайте...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
bars80080
Дата 1.6.2009, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 50
Всего: 315



может <base прописан не корректный? или линк в "img/{swf}.swf" пытается вести к примеру на server.ru, а страница открыта в www.server.ru ?
PM MAIL WWW   Вверх
ksnk
Дата 1.6.2009, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



bars80080, Линк ведет на относительный адрес. Base не прописан вообще, это и не требуется, imho. "Точка входа" в сайт единственная и все адреса - относительны.
onclick, не работает оттого (мне кажется), что после обработки сообщение необходимо прочистить, чтобы оно не "влетело" во флеш, но специфика установки обработчика такого пока не позволяет. 

Пока, впрочем, нету времени (желания?  smile ) поковыряться в этой задаче. Появится время, поковыряюсь, отпишусь...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
ksnk
Дата 12.6.2009, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



По разным причинам заказчику не очень понравилось такое поведение обработчика флешки. Нельзя, к примеру, открыть ссылку в отдельном окне или в новой вкладке, поэтому анализ ситуации продолжился.

Был рассмотрен классический, из примеров описания флеш, бутерброд - контейнер и два абсолютных дива с разными z-index. В "верхнем"- ссылка, растянутая на весь контейнер, в  "нижнем" - флешка с wmode=opaque или transparent. В примерах все прекрасно нажимается, однако, оказалось, что при активной анимации (непрерывная анимация с изменением всей поверхности холста) флешка не дает кликнуть по лежащей поверх нее кнопке никак. Причем, в углах,  которые не анимируется некоторое время, ссылка нажимается.

Единственное относительно здравое решение - скрывать флешку на время, пока мышка бегает поверх области.

Получилось примерно такое решение

Код

    $(".flash").each(function(){

        this.style.position='relative';

        var link=this.getAttribute('_link');
        $('<a href="'+link+'"></a>').css({
                'z-index':10,display:'block',position:'absolute',
                                top:0,left:0,width:this.clientWidth,height:this.clientHeight
            }).appendTo($(this));

        $(this).hover(function(){
            $(this).find('object').hide();
        },function(){
            $(this).find('object').show();
        })    
    });

    
Код

<div class="flash" style="width:232px;height:142px;background:url(img/baner.gif) no-repeat;" 
_link="link/to/heaven">
{::flash:banner:232x142}
</div>


baner.gif - принтскрин банера, чтобы не сильно "резало глаза" прекращение анимации. В этом случае wmode=opaque, transparent не подойдет...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
youri
Дата 12.6.2009, 05:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: 5
Всего: 16



вот, что у меня получилось нагуглить - http://stackoverflow.com/questions/429350/...s-on-a-flash-ad
PM   Вверх
ksnk
Дата 12.6.2009, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



youri, интересно, но не совсем то, что надо! Здесь предлагается перехватить клик и сделать что-то свое, внутри флешки, передать управление JS и т.д. Я и так могу, перехватить mousedown и сделать что-то свое. 
Мне нужно не совсем это. Заказчику нужно, чтобы по клику на флешку срабатывала ссылка, со всеми ее примочками - окошком выбора "куда открыть". для правого батона, открытием в новой закладке для центрального и так далее. Единственное, imho, решение в этом случае - подставить эту самую ссылку поверх/вместо флешки...
 
Тут , правда появляется такое соображение. Все эти мои банеры собирает и рисует сам заказчик. подозревать его в умышленном "поедании" кликов флешкой и в дополнительной "кликовой" функциональности как-то не приходится. Сам банер, вероятно (надо как-нибудь дизассемблировать smile ), не содержит никакого Action Script в себе вообще, а представляет циклически повторяющееся полотно. Может сам флеш вставляет стандартный обработчик кликов, который, потенциально, можно убрать вообще?





--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
ksnk
Дата 12.7.2009, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Внезапно решение нашлось. Как всегда - оно оказалось давно забытым старым. Нужно просто поместить невидимый фрейм поверх флешки. Итого - решение 

шаблон разметки - в атрибут rel включается ссылка для перехода по клику.
Код

<div class="flash" style="width:232px;height:142px;background:url(img/baner.gif) no-repeat;" 
rel="http://site.ru/link">
{::flash:BanST6:232x142}
</div>

и JavaScript для лечения
Код

    $(".flash").each(function(){
        this.style.position='relative';
        var link=this.getAttribute('rel')
          ,h=this.clientHeight
          ,frame=$('<iframe>').appendTo($(this))
            .attr('src',"javascript:;")
            .css({'scrolling':'no','frame-border':0,opacity:0.01,height:h})
          ,fd=frame[0].contentWindow.document;
         
        fd.open();
        fd.write('<html><body style="margin: 0 !important; background-color: transparent !important;"><a '+
                'style="display:block; height:'+h+'px;" target="top" href="'+link+'">&nbsp;</a></'+
                'body></'+'html>');
        fd.close();
    });

еще я использую css для комплекта 
Код

.flash iframe {
    position:absolute;
    top:0; left:0;
    border : 0;
}
, хотя можно было бы включить установку этих свойств в javaScript...

Добавлено через 3 минуты и 3 секунды
Фрейм получается не совсем "невидимый", но иначе некоторые особенно умные броузеры вообще его игнорируют. А так и проблема с непрозрачным бякграундом у iframe'а благополучно игнорируется...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Вёрстка веб-сайтов | Следующая тема »


 




[ Время генерации скрипта: 0.1039 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.