javascript événement onclick sur objet flash
j'ai un film flash intégré à l'intérieur d'une div, j'ai mis un javascript onclick event handler dans la div principale, mais n'est pas attraper le clic, qu'est-ce qui ne va pas?
Code:
<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>
8 réponses
Il est préférable de penser à tous les swf comme ayant un z-ordre de l'infini. Flash est au-dessus et il y a très peu qui peut être fait pour arrêter cela. D'autre part, si vous avez accès au code du SWF lui-même, ou si vous pouvez utiliser un autre swf pour charger votre swf actuel, vous serez en mesure d'utiliser un couple de commandes Flash différentes pour adresser le JavaScript de la page. (ExternalInterface est votre meilleur pari).
//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" );
}
une autre solution alternative utilisant onmousedown au lieu de onclick est fourni par Darwin ci-dessous.
j'ai trouvé ce à http://progproblems.blogspot.com/2009/08/javascript-onclick-for-flash-embeded.html
- définir le paramètre
wmode
transparent
. Cela permet à l'objet contenant le flash de recevoir le javascriptonclick
. - Utiliser
onmousedown
placeonclick
. En dépit de l'aide dewmode
transparent
, certains navigateurs n'appelleront toujours pas leonclick
, mais ils font appelonmousedown
.
Le code ressemble à ceci:
<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>
Il travail pour mes besoins =)
le flash ne propage certainement pas l'événement de clic à son parent. Rien que tu ne puisses faire à moins d'avoir écrit le flash, je suppose.
l'objet flash attrape toujours le clic et ne le transmet pas automatiquement. vous aurez à construire cette fonctionnalité - attraper onclick dans flash et appeler js-fonction.
qu'essayez-vous d'accomplir?
essayez cette solution facile couvrir le flash avec div et mettre l'événement de clic sur le dessus div donc flash ne sera jamais saisir la souris.
<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>
faire de l'événement onclick sur la balise object. (la balise obejct supporte les évènements de la souris). ensuite, saisissez la div mère via DOM.