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>
¿Fue útil?

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

  1. Establezca el parámetro wmode en transparent. Esto permite que el objeto que contiene el flash reciba el javascript onclick.
  2. 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');">&nbsp;</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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top