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>
35
demandé sur Pedro 2009-09-18 17:30:26

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.

21
répondu cwallenpoole 2012-04-13 06:25:28

j'ai trouvé ce à http://progproblems.blogspot.com/2009/08/javascript-onclick-for-flash-embeded.html

  1. définir le paramètre wmodetransparent. Cela permet à l'objet contenant le flash de recevoir le javascript onclick.
  2. Utiliser onmousedown place onclick. En dépit de l'aide de wmodetransparent, certains navigateurs n'appelleront toujours pas le onclick, mais ils font appel onmousedown.

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

86
répondu Darwin 2012-09-18 21:24:12

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.

2
répondu Tor Haugen 2009-09-18 13:33:55

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?

2
répondu oberhamsi 2009-09-18 13:35:04

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');">&nbsp;</div>
</div>
2
répondu Tahir 2011-02-22 06:02:31

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.

1
répondu Elijan Sejic 2010-10-25 06:21:14
<param name="wmode" value="transparent" />

C'était la solution pour moi. Je l'ai implémenté sur le contenu Ac_runactivec.js à la params:

'wmode', 'transparent',