2009-09-18 19 views
35

Tengo una película flash incrustada dentro de un div, puse un controlador de eventos javascript onclick en el div principal, pero no capto el clic, ¿qué pasa?evento javascript onclick sobre objeto flash

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> 
+0

Ver http://stackoverflow.com/questions/33459/how-do-you-use-a-flash-object-as-a-link – voyager

Respuesta

21

Lo mejor es pensar que todos los swf tienen un orden z de infinito. Flash está en la parte superior y hay muy poco que se puede hacer para detener eso. Por otro lado, si tiene acceso al código del SWF mismo, o si puede usar otro swf para cargar su swf actual, podrá usar un par de diferentes comandos de Flash 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 a continuación otra solución alternativa que utiliza onmousedown en lugar de onclick.

+0

Intento en flash con el (lanzamiento) {getURL ("javascript: highlightform()"); } y funciona bien! Pero tu solución también es válida, ¡gracias! – Pedro

2

El flash es casi seguro que no propaga el evento click a su padre. Nada que puedas hacer a menos que escribas el flash, supongo.

2

el objeto flash siempre captará el clic y no lo pasará automáticamente. tendrás que construir esa funcionalidad: captura el clics en flash y llama a la función JS.

¿Qué estás tratando de lograr?

+0

Estoy tratando de cambiar la clase css de otro objeto de la página cuando hacemos clic en el swf – Pedro

1

haga clic en evento en la etiqueta del objeto. (la etiqueta obejct admite eventos de mouse). luego toma el div principal a través de DOM.

86

He encontrado esto en http://progproblems.blogspot.com/2009/08/javascript-onclick-for-flash-embeded.html

  1. Ajuste el parámetro wmode-transparent. Esto permite que el objeto que contiene el flash reciba el javascript onclick.
  2. Use onmousedown insted de onclick. A pesar de usar wmodetransparent, algunos navegadores todavía no llaman al onclick, pero sí llaman al onmousedown.

El código es el siguiente:

<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> 

que funcione para mis necesidades =)

+0

http://stackoverflow.com/questions/6273966/detect-flash-object-click-in-javascript/6276394#6276394 –

+0

¡Gran respuesta, Darwin! – Eric

+1

¡Gracias! Como seguimiento, una diferencia en el uso de mousedown es que se activará haciendo clic con el botón derecho y haciendo clic con el botón izquierdo, haciendo clic con el botón derecho en el menú contextual de Flash y también con lo que haga su escucha de clic. Entonces, esta respuesta puede ayudar a aquellos que buscan bloquear los clics con el botón derecho. http://stackoverflow.com/questions/9521519/how-can-i-detect-a-rightmouse-button-event-on-mousedown – heff

2

Pruebe esta solución fácil tapar el flash con div y poner el evento click en la parte superior div modo de flash se nunca agarres 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> 
1
<param name="wmode" value="transparent" /> 

Esta fue la solución para mí. Bueno, he implementado por encima de los AC_RunActiveContent.js en los params:

'wmode', 'transparent', 

Nice !!!

1

Tuve ese problema cuando traté de crear banners automáticos dinámicos. Si SWF se configuraba en el modo 'opaquecolor', no tenía clics aceptables, y tenía que usar opaquecolor porque algunos banners se confundían con los colores de los sitios web.La solución que encontré, es establecer el SWF en modo 'transparente', en <div> de z-index: 10, y colocar debajo de él un nuevo <div> de las mismas dimensiones del archivo SWF, rellenado con el opaquecolor de el SWF. Ambos divs en una etiqueta <a>. Eso funciono.

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> 
Cuestiones relacionadas