8

我正在制作一个动态横幅系统,它可以处理 img 横幅,以及使用对象/嵌入完成的 flash 横幅。整个站点大量使用 jQuery,包括处理“点击”事件。

在跟踪图像本身的点击时,这显然不是问题(我跟踪父 DIV 标记上的点击。但是,当广告是 SWF 时它会失败,正如我所怀疑的那样。

是否有 jQuery 解决方法可以让我使用 DOM 捕获对 Flash 元素的点击?

4

3 回答 3

10

我知道这是很久以前发布的并且已经回答了,但我只是想为未来的网站访问者添加一个更简单的解决方案。虽然嵌入的 SWF 文件会吞下 onclick 事件,但它不会吞下 onmousedown 事件。诀窍是在参数标签和嵌入​​标签中将 wmode 设置为透明。

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

您可以使用 jQuery 绑定到 mousedown 事件,而不是像这样:

$('#layer1').mousedown(function() {
  alert('mouse down');
});
于 2011-03-03T16:44:45.257 回答
3

如果您可以访问 SWF 的源代码,则可以使用ExternalInterface它与包含的 html 页面进行通信。

//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.
}
于 2009-11-24T10:56:53.750 回答
2

我能够使用网络线回答并使用以下方法获得对象点击。

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

我希望这对其他人有帮助,谢谢webwires

于 2011-07-19T14:16:31.827 回答