событие javascript onclick над объектом flash - PullRequest
35 голосов
/ 18 сентября 2009

У меня есть один встроенный флэш-фильм внутри одного div, я поместил один обработчик события javascript onclick в основной div, но не ловит щелчок, что не так?

Код:

   <div id="top-box-player" onclick="alert('Hi Bananas!');">
     <object width="400" height="300">
        <param name="movie" value="general.swf">
        <embed src="./swf/general.swf" width="400" height="300">
        </embed>
     </object>
   </div>

Ответы [ 8 ]

86 голосов
/ 15 ноября 2010

Я нашел это в http://progproblems.blogspot.com/2009/08/javascript-onclick-for-flash-embeded.html

  1. Установите для параметра wmode значение transparent. Это позволяет объекту, содержащему вспышку, получить JavaScript onclick.
  2. Используйте onmousedown insted из onclick. Несмотря на использование wmode transparent, некоторые браузеры по-прежнему не вызывают onclick, но они вызывают onmousedown.

Код выглядит так:

<div onmousedown="clickBanner(1)">
<object>
<param name="movie" value="3.swf">
<param name="wmode" value="transparent" />
<embed wmode=transparent allowfullscreen="true" allowscriptaccess="always" src="3.swf"></embed>
</object>
</div>

Это работает для моих нужд =)

21 голосов
/ 18 сентября 2009

Лучше всего думать, что все swf имеют z-порядок бесконечности. Вспышка на высоте, и очень мало что можно сделать, чтобы это остановить. С другой стороны, если у вас есть доступ к коду самого SWF-файла или если вы можете использовать другой SWF-файл для загрузки текущего SWF-файла, вы сможете использовать несколько различных команд Flash для обращения к JavaScript на странице , (ExternalInterface - ваш лучший выбор).

//This is what your AS code should look like:
import flash.external.ExternalInterface;
import flash.events.MouseEvent;

root.addEventListener( MouseEvent.CLICK, useExternal, true );

function useExternal( event:MouseEvent):void
{
    //swfClickFunction is defined in JavaScript
    ExternalInterface.call( "swfClickFunction" );
}

Другое альтернативное решение, использующее onmousedown вместо onclick, представлено Дарвином ниже.

2 голосов
/ 22 февраля 2011

Попробуйте это простое решение: закройте флешку div и поместите событие click на верхний div, чтобы flash никогда не хватал мышь.

<div style="position:absolute;top:209px;left:80px;z-index:500;" id="helpvideos"> 
<div style="float:left">
<fb:swf 
    swfbgcolor="FFFFFF"  
    swfsrc='<?php echo SITE_URL;?>swf/3_sidebar.swf'  
    width='600' height='670'
    wmode="transparent"
     />
</div>
<div style="width:600px;height:670px;position:absolute;float:left;z-index:6000;" onclick="document.getElementById('helpvideos').setStyle('display','none');">&nbsp;</div>
</div>
2 голосов
/ 18 сентября 2009

флэш-объект всегда будет ловить щелчок и не будет автоматически передавать его. вам придется создать эту функциональность - поймать щелчок во флэш-памяти и вызвать JS-функцию.

что вы пытаетесь достичь?

2 голосов
/ 18 сентября 2009

Флэш почти наверняка не передает событие click своему родителю. Полагаю, ты ничего не сможешь сделать, пока не напишешь флешку.

1 голос
/ 04 ноября 2011

У меня была такая проблема, когда я пытался создавать автоматические динамически размещаемые баннеры. Если SWF был установлен в режим «непрозрачный», то у меня не было кликов, приемлемых - и мне пришлось использовать непрозрачный цвет, потому что некоторые баннеры были перепутаны с цветами веб-сайтов. Решение, которое я нашел, состоит в том, чтобы установить SWF в «прозрачный» режим с

1 голос
/ 15 сентября 2011
<param name="wmode" value="transparent" />

Это было решением для меня. Ну, я реализовал это через AC_RunActiveContent.js в параметрах:

'wmode', 'transparent',

Nice !!! * * 1005

1 голос
/ 25 октября 2010

сделать событие onclick для тега объекта. (тег obejct поддерживает события мыши). затем захватите родительский div через DOM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...