2009-11-24 18 views
8

Estoy haciendo un sistema de carteles dinámico que puede manejar banderas img, así como banners flash hechas con objeto/embed. Todo el sitio hace un uso intensivo de jQuery, incluido el manejo de los eventos de "clic".El seguimiento de un clic en una película flash (objeto/embed) con jQuery

Obviamente, esto no es un problema cuando se trata de rastrear los clics en la imagen (rastreo el clic en la etiqueta DIV principal. Sin embargo, falla cuando el anuncio es un archivo SWF, como sospechaba.

¿existe una solución jQuery que me permitiera capturar un clic en un elemento de flash con el DOM?

Respuesta

3

Si usted tiene acceso a la fuente de SWF, puede utilizar ExternalInterface para comunicarse con la página hTML que contiene

//inside the flash movie: 
stage.addEventListener(MouseEvent.CLICK, onClick); 
function onClick(e:MouseEvent):void 
{ 
    ExternalInterface.call("handleFlashClick", [parameters to the method]); 
} 

//javascript in the containing html page 
function handleFlashClick() 
{ 
    //call the jQuery method here. 
} 
+1

no tengo acceso a la fuente en absoluto, es un sistema de banner que permitiría a los clientes cargar sus propios banners SWF en el sistema. Dicho esto, ¿sería una mejor idea vincular un banner "interno" que cargue el SWF de banner de cliente como una película dentro de sí mismo, otorgando a mi SWF el control del archivo flash, al tiempo que permite que los archivos SWF de cliente intactos ser cargado ?? – David

+0

Eso suena como una buena idea. – Amarghosh

+0

¡Gracias por tu ayuda! :) – David

10

Sé que esto se publicó hace mucho tiempo y ya se respondió, pero solo quería agregar una solución mucho más sencilla para los futuros visitantes del sitio. Mientras que el archivo SWF incrustado se tragará el evento onclick, no se traga el evento onmousedown. El truco es hacer que el modo w se muestre transparente en las etiquetas de param así como en la etiqueta de inserción.

<div id="layer1" onmousedown="alert('mouse down')"> 
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 
codebase="http://fpdownload.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" 
width="799" height="741" id="myMovieName"> 
<param name="movie" value="_data.swf" /> 
<param name="quality" value="high" /> 
<param name="play" value="true" /> 
<param name="loop" value="true" /> 
<param name="wmode" value="transparent" /> 
<embed src="_data.swf" quality=high bgcolor=#FFFFFF width="799" height="741" 
name="myMovieName" type="application/x-shockwave-flash" 
play="true" loop="true" wmode="transparent" 
pluginspage="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"> 
</embed> 
</object> 
</div> 

Puede utilizar jQuery para unirse al evento MouseDown en lugar de este modo:

$('#layer1').mousedown(function() { 
    alert('mouse down'); 
}); 
+0

cualquier forma posible de hacer lo mismo con doble clic? – Osa

2

que fue capaz de tomar webwires respuesta y obtener un objeto clic de trabajo utilizando la siguiente.

// Podcast player GA event tracking 
var podcast_player = $('object.podcast-player'); 
if(podcast_player.length > 0) 
{ 
    podcast_player.live('mousedown',function(){ 
     _gaq.push(['_trackEvent', 'Podcast', 'Play']); 
    }); 
} 

espero que esto ayude a alguien más por ahí, gracias webwires.

Cuestiones relacionadas