2009-09-18 24 views
35

Ho un filmato flash incorporato in un div, ho inserito un gestore di eventi javascript onclick nel div principale, ma non sto recuperando il clic, cosa c'è che non va?evento onclick javascript su oggetto flash

Codice:

<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

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

risposta

21

È meglio pensare a tutti gli swf come aventi un ordine z dell'infinito. Flash è in primo piano e c'è ben poco da fare per fermarlo. D'altra parte, se hai accesso al codice del SWF stesso, o se puoi usare un altro swf per caricare il tuo swf attuale, sarai in grado di usare un paio di diversi comandi Flash per indirizzare il JavaScript della pagina . (ExternalInterface è la soluzione migliore).

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

Un'altra soluzione alternativa che utilizza onmousedown anziché onclick è fornita da Darwin in basso.

+0

Provo in flash con su (release) {getURL ("javascript: highlightform()"); } e funziona bene !!! Ma anche la tua soluzione è valida, quindi grazie! – Pedro

2

Il flash quasi certamente non propaga l'evento click al suo genitore. Niente che puoi fare a meno che tu non abbia scritto il flash, suppongo.

2

l'oggetto flash cattura sempre il clic e non lo passa automaticamente. dovrai costruire quella funzionalità - cattura onclick in flash e chiama la funzione JS.

cosa stai cercando di realizzare?

+0

Sto cercando di cambiare la classe CSS di un altro pagina oggetto quando clicchiamo sulla swf – Pedro

1

fare onclick evento su un tag dell'oggetto. (Il tag obejct supporta gli eventi del mouse). quindi prendi il div padre via DOM.

86

ho trovato questo a http://progproblems.blogspot.com/2009/08/javascript-onclick-for-flash-embeded.html

  1. Impostare il parametro wmode-transparent. Ciò consente all'oggetto contenente il flash di ricevere il javascript onclick.
  2. Utilizzare onmousedown di onclick. Nonostante l'utilizzo di wmodetransparent, alcuni browser non chiamano ancora lo onclick, ma chiamano lo onmousedown.

Il codice simile a questo:

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

Funziona per le mie esigenze =)

+0

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

+0

Ottima risposta Darwin! – Eric

+1

Grazie! Come follow-up, una differenza nell'usare il mouse è che verrà attivata facendo clic con il tasto destro e facendo clic con il tasto sinistro del mouse, facendo clic con il pulsante destro del mouse sul menu di scelta rapida del flash e anche su quello che farà il listener dei clic. Quindi questa risposta può aiutare chi cerca di bloccare i clic giusti. http://stackoverflow.com/questions/9521519/how-can-i-detect-a-rightmouse-button-event-on-mousedown – heff

2

Prova questa soluzione facile coprire il flash con div e mettere l'evento click sulla parte superiore div in modo del flash si mai afferrare il 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" /> 

questa era la soluzione per me. Bene, l'ho implementato su AC_RunActiveContent.js ai parametri:

'wmode', 'transparent', 

Bello !!!

1

Ho avuto questo problema quando ho provato a creare banner automatici dinamici. Se i file SWF sono stati impostati in modalità 'opaquecolor', allora non ho avuto clic accettabili - e ho dovuto usare opaquecolor perché alcuni banner erano incasinati con i colori dei siti web.La soluzione che ho trovato, è quella di impostare il SWF in modalità 'trasparente', in un <div> di z-index: 10, e posizionare sotto di esso un nuovo <div> delle stesse dimensioni del file SWF, riempito con il colore opaco di il SWF. Entrambi i div in un tag <a>. Ha funzionato.

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