2009-11-24 11 views
8

Ich mache ein dynamisches Banner-System, das img Banner sowie Flash-Banner mit Objekt/Embed verarbeiten kann. Die gesamte Website nutzt jQuery, einschließlich der Handhabung der "Klick" -Ereignisse.Verfolgen Sie einen Klick auf einen Flash-Film (Objekt/Einbetten) mit jQuery

Dies ist offensichtlich kein Problem, wenn es um das Verfolgen der Klicks auf das Bild selbst geht (ich verfolge den Klick auf das Eltern-DIV-Tag. Allerdings scheitert es, wenn die Anzeige eine SWF ist, wie ich es vermutete.

gibt es eine jQuery Abhilfe, die mich mit dem DOM?

Antwort

3

Wenn Sie den Zugriff auf die Quelle der SWF hat, können Sie ExternalInterface verwenden, um die Kommunikation mit der hTML-Seite einen Klick auf ein Flash-Element zu erfassen erlauben würde, .

//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

Ich habe überhaupt keinen Zugriff auf die Quelle, es ist ein Banner-System, mit dem Kunden ihre eigenen SWF-Banner auf das System hochladen können. Mit diesem gesagt, wäre es eine bessere Idee, ein "In-House" Banner zu verknüpfen, das die Client-Banner-SWF als Film in sich lädt, meine SWF-Kontrolle über die Flash-Datei gibt, während immer noch unberührte Client-SWF-Dateien zu hochgeladen werden ?? – David

+0

Das klingt nach einer guten Idee. – Amarghosh

+0

Vielen Dank für Ihre Hilfe! :) – David

10

Ich weiß, dass dies vor langer Zeit gepostet wurde und bereits beantwortet hat, aber ich wollte nur eine viel einfachere Lösung für zukünftige Website-Besucher hinzufügen. Während die eingebettete SWF-Datei das Onclick-Ereignis verschluckt, schluckt sie das Onmousedown-Ereignis nicht. Der Trick besteht darin, den wmode in den param-Tags sowie im embed-Tag transparent zu machen.

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

können Sie jQuery verwenden, um das Mousedown-Ereignis wie so anstatt zu binden:

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

eine Möglichkeit, das Gleiche mit Doppelklick zu tun? – Osa

2

ich in der Lage war zu nehmen Stegdrähte beantworten und erhalten ein Objekt klicken arbeiten die folgende verwenden.

// 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']); 
    }); 
} 

Ich hoffe, das hilft jemand anderes da draußen, dank Stegdrähte.

Verwandte Themen