Javascript onclick event over flash object
У меня есть один встроенный флеш-ролик внутри одного div, я помещаю один обработчик события onclick javascript в главный 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>
Ответы
Ответ 1
Лучше всего думать о том, что все swf имеют z-порядок бесконечности. Flash находится сверху, и очень мало можно сделать, чтобы остановить это. С другой стороны, если у вас есть доступ к самому коду самого 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
Я нашел это на http://progproblems.blogspot.com/2009/08/javascript-onclick-for-flash-embeded.html
- Задайте параметр
wmode
transparent
. Это позволяет объекту, содержащему флэш, получать javascript onclick
.
- Используйте
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>
Он работает для моих нужд =)
Ответ 3
Вспышка почти наверняка не распространяет событие click на родителя. Ничего не могу сделать, если вы не написали флешку, я полагаю.
Ответ 4
Flash-объект всегда будет захватывать клик, а не автоматически передавать его. вам придется построить эту функциональность - поймайте onclick во flash и вызовите JS-функцию.
что вы пытаетесь выполнить?
Ответ 5
Попробуйте это простое решение, чтобы покрыть флеш с помощью div и поместить событие click на верхний div, чтобы вспышка никогда не захватила мышь.
<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');"> </div>
</div>
Ответ 6
сделать onclick событие на теге объекта. (тег obejct поддерживает события мыши). затем захватите родительский div через DOM.
Ответ 7
<param name="wmode" value="transparent" />
Это решение для меня. Ну, я реализовал его над AC_RunActiveContent.js в параметрах:
'wmode', 'transparent',
Ницца!!!
Ответ 8
У меня была эта проблема, когда я пытался создавать автоматические динамические баннеры. Если SWF был установлен в режим "opaquecolor", тогда у меня не было доступных кликов - и мне пришлось использовать opaquecolor, потому что некоторые баннеры были испорчены цветами веб-сайтов. Решение, которое я нашел, заключается в том, чтобы установить SWF в "прозрачный" режим, на <div> от z-индекса: 10 и разместить под ним новый <div> одинаковых размеров файла SWF, заполненного opaquecolor SWF. Оба divs в <a> тег. Это сработало.
Example:
<a href="www.mysite.com">
<div id="SWF_file_container" style="width:100px; height:40px; z-index:10;">
<object> .... </object> (adding SWF in TRANSPARENT MODE)
</div>
<div id="opaquecolor_of_swf" style="width:100px; height:40px; z-index:2; background-color:#ff0000;"></div>
</a>