35 votes

événement javascript onclick sur un objet flash

J'ai un film flash intégré dans une div, je mets un gestionnaire d'événements javascript onclick dans la div principale, mais le clic n'est pas capté, 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>
 

86voto

Darwin Points 779

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

  1. Définissez le paramètre wmode de transparent. Cela permet à l'objet contenant le flash pour recevoir le javascript onclick.
  2. Utiliser onmousedown insted d' onclick. En dépit de l'utilisation de wmode transparent, certains navigateurs encore l'habitude d'appeler l' onclick, mais ils n'appellent 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 =)

21voto

cwallenpoole Points 34940

Il est préférable de penser à tous les swf comme ayant un z-ordre de l'infini. Flash est sur le dessus et il ya très peu qui peut être fait pour les arrêter. D'autre part, si vous avez accès au code de la SWF lui-même, ou si vous pouvez utiliser un autre fichier swf à charger votre fichier swf, vous serez en mesure d'utiliser un couple de différentes Flash commandes à l'adresse de 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 de rechange à l'aide de onmousedown au lieu de onclick est fourni par Darwin ci-dessous.

2voto

Tor Haugen Points 8258

Le flash ne propage certainement pas l'événement click à son parent. Je suppose que vous ne pouvez rien faire si vous n'avez pas écrit le flash.

2voto

oberhamsi Points 762

l'objet flash capturera toujours le clic et ne le transmettra pas automatiquement. vous devrez construire cette fonctionnalité - attrapez onclick en flash et appelez JS-function.

Qu'est-ce que vous essayez d'accomplir?

2voto

Tahir Points 21

Essayez cette solution simple, couvrez le flash avec div et placez l'événement click sur top div pour que flash ne s'empare jamais de 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>
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X