evento onclick de javascript sobre objeto flash
-
22-07-2019 - |
Pregunta
Tengo una película flash incrustada dentro de un div, puse un controlador de eventos onclick de javascript en el div principal, pero no está captando el clic, ¿qué está mal?
Código:
<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>
Solución
Es mejor pensar que todos los swf tienen un orden z de infinito. Flash está en la parte superior y se puede hacer muy poco para detenerlo. Por otro lado, si tiene acceso al código del SWF en sí, o si puede usar otro swf para cargar su swf actual, podrá usar un par de comandos Flash diferentes para abordar el JavaScript de la página . (ExternalInterface es tu mejor opción).
//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" );
}
Darwin proporciona otra solución alternativa que utiliza onmousedown en lugar de onclick.
Otros consejos
Encontré esto en http: // progproblems. blogspot.com/2009/08/javascript-onclick-for-flash-embeded.html
- Establezca el parámetro
wmode
entransparent
. Esto permite que el objeto que contiene el flash reciba el javascriptonclick
. - Use
onmousedown
en lugar de <=>. A pesar de utilizar <=> <=>, algunos navegadores aún no llaman a <=>, pero sí a <=>.
El código se ve así:
<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>
Funciona para mis necesidades =)
El flash casi ciertamente no propaga el evento click a su padre. Nada que pueda hacer a menos que haya escrito el flash, supongo.
el objeto flash siempre captará el clic y no lo pasará automáticamente. tendrá que crear esa funcionalidad: encienda el clic en flash y llame a la función JS.
¿qué estás tratando de lograr?
Pruebe esta solución fácil cubra el flash con div y coloque el evento click en el div superior para que flash nunca agarre el mouse.
<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>
hacer evento onclick en la etiqueta del objeto. (la etiqueta de objeto admite eventos del mouse). luego toma el div padre a través de DOM.
<param name="wmode" value="transparent" />
Esta fue la solución para mí. Bueno, lo implementé sobre AC_RunActiveContent.js en los parámetros:
'wmode', 'transparent',
¡Agradable!
Tuve ese problema cuando intenté hacer pancartas dinámicas colocadas automáticamente. Si SWF se configuró en modo 'opaquecolor', entonces no tenía clics aceptables, y tuve que usar opaquecolor porque algunos banners estaban desordenados con los colores de los sitios web. La solución que encontré es establecer el SWF en modo 'transparente', en un & Lt; div & Gt; del índice z: 10, y coloque debajo de él un nuevo < div > de las mismas dimensiones del archivo SWF, rellenas con el color opaco del SWF. Ambos divs en un & Lt; a & Gt; etiqueta. Eso funcionó.
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>