Pergunta

Eu tenho um filme flash incorporado dentro de uma div, eu coloquei um javascript onclick manipulador de eventos no div principal, mas não está pegando o clique, o que está errado?

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>
Foi útil?

Solução

É melhor pensar em todas de swf como tendo uma ordem z do infinito. Flash é em cima e há muito pouco que pode ser feito para parar isso. Por outro lado, se você tem acesso ao código do próprio SWF, ou se você pode usar outro swf para carregar seu swf atual, você vai ser capaz de usar um par de comandos de flash diferente de abordar o JavaScript da página . (ExternalInterface é a sua melhor aposta).

//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" );
}

Outra solução alternativa utilizando onmousedown em vez de onclick é fornecida por Darwin abaixo.

Outras dicas

Eu encontrei este em http: // progproblems. blogspot.com/2009/08/javascript-onclick-for-flash-embeded.html

  1. Defina o wmode param para transparent. Isso permite que o objeto que contém o flash para receber o onclick javascript.
  2. Use onmousedown insted de onclick. Apesar de usar wmode transparent, alguns navegadores ainda não vai chamar o onclick, mas eles chamada onmousedown.

Os olhares código como este:

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

É trabalhar para minhas necessidades =)

O flash quase certamente não propaga o evento clique para seu pai. Nada que você pode fazer, a menos que você escreveu o flash, eu suponho.

o objeto flash sempre pegar o clique e não passá-lo automaticamente junto. você vai ter que construir essa funcionalidade -. captura onclick em flash e chamar JS-função

o que você está tentando realizar?

Tente esta cobertura solução fácil o flash com div e colocar o evento clique em div superior de modo de flash nunca vai pegar o 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>

fazer onclick evento em um tag do objeto. (Marca de objeto suporta eventos de mouse). em seguida, pegue o div pai via DOM.

<param name="wmode" value="transparent" />

Esta foi a solução para mim. Bem, eu implementado ao longo dos AC_RunActiveContent.js nos Parâmetros:

'wmode', 'transparent',

Nice !!!

Eu tive esse problema quando eu tentei fazer banners colocados dinâmicas automatizadas. Se SWF foram setado para o modo 'opaquecolor', então eu não tinha cliques acceptables - e eu tive que usar opaquecolor porque alguns banners foram confuso com as cores websites. A solução que eu encontrei, é definir o SWF para o modo 'transparente', em um

scroll top