evento onclick javascript su oggetto flash
-
22-07-2019 - |
Domanda
Ho un filmato flash incorporato in un div, ho inserito un gestore eventi onclick javascript nel div principale, ma non riesco a catturare il clic, cosa c'è che non va?
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>
Soluzione
È meglio pensare che tutti gli swf abbiano un ordine z di infinito. Flash è in cima e c'è molto poco che si può fare per fermarlo. D'altra parte, se hai accesso al codice del file SWF stesso o se puoi utilizzare un altro swf per caricare il tuo swf corrente, sarai in grado di utilizzare 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 di seguito.
Altri suggerimenti
L'ho trovato su http: // progproblems. blogspot.com/2009/08/javascript-onclick-for-flash-embeded.html
- Imposta il parametro
wmode
sutransparent
. Ciò consente all'oggetto che contiene il flash di ricevere il javascriptonclick
. - Utilizza
onmousedown
installato <=>. Nonostante l'utilizzo di <=> <=>, alcuni browser non chiamano ancora <=>, ma chiamano <=>.
Il codice è simile al seguente:
<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 =)
Il flash quasi sicuramente non propaga l'evento click al suo genitore. Nulla che puoi fare a meno che tu non abbia scritto il flash, suppongo.
l'oggetto flash cattura sempre il clic e non lo passa automaticamente. dovrai creare quella funzionalità: cattura onclick in flash e chiama la funzione JS.
cosa stai cercando di realizzare?
Prova questa semplice soluzione copri il flash con div e metti l'evento click in primo piano in modo che il flash non afferri mai 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');"> </div>
</div>
esegue l'evento onclick su un tag oggetto. (il tag oggetto supporta gli eventi del mouse). quindi prendi il div genitore tramite DOM.
<param name="wmode" value="transparent" />
Questa è stata la soluzione per me. Bene, l'ho implementato su AC_RunActiveContent.js ai parametri:
'wmode', 'transparent',
Nice !!!
Ho avuto questo problema quando ho provato a creare banner automatici posizionati dinamici. Se SWF fosse impostato in modalità "opaquecolor", allora non avrei avuto clic accettabili e avrei dovuto usare opaquecolor perché alcuni banner erano incasinati con i colori dei siti web. La soluzione che ho trovato è di impostare il file SWF in modalità 'trasparente', a & Lt; div & Gt; di z-index: 10 e posiziona sotto di esso un nuovo < div > delle stesse dimensioni del file SWF, riempito con il colore opaco del file SWF. Entrambi si tuffano in un & Lt; a & Gt; etichetta. 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>