通过Flash对象的JavaScript onclick事件

我有一个embedded在一个div内的Flash电影,我把一个JavaScript onclick事件处理程序在主div,但不捕捉点击,有什么不对?

码:

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

最好把所有的swf想象成一个无限的z阶。 Flash是最重要的,可以做的很less。 另一方面,如果您有权访问SWF自身的代码,或者如果您可以使用其他swf来加载当前的swf,则可以使用几个不同的Flash命令来解决页面的JavaScript问题。 (ExternalInterface是你最好的select)。

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

下面的Darwin提供了另一种使用onmousedown而不是onclick的解决scheme。

我在http://progproblems.blogspot.com/2009/08/javascript-onclick-for-flash-embeded.htmlfind了这个;

  1. 将参数wmodetransparent 。 这允许包含Flash的对象接收javascript onclick
  2. onclick使用onmousedown 。 尽pipe使用transparent wmode ,一些浏览器仍然不会打电话onclick ,但他们确实打电话onmousedown

代码如下所示:

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

它为我的需求=)

Flash几乎肯定不会将click事件传播给其父项。 没有什么可以做,除非你写了闪光灯,我想。

Flash对象将始终捕捉点击,不会自动传递。 你将不得不build立这个function – 捕捉Flash中的onclick并调用JS函数。

你想达到什么目的?

尝试这个简单的解决scheme覆盖闪光与div和把点击事件顶部div所以闪光灯将永远不会抓住鼠标。

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

在对象标签上执行onclick事件。 (obejct标签支持鼠标事件)。 然后通过DOM抓住父div。

 <param name="wmode" value="transparent" /> 

这是我的解决scheme。 那么,我通过参数AC_RunActiveContent.js实现它:

 'wmode', 'transparent', 

尼斯!

当我尝试制作自动dynamic放置的横幅广告时,我遇到了这个问题。 如果SWF被设置为“不透明颜色”模式,那么我没有点击可以接受 – 我不得不使用不透明颜色,因为一些横幅与网站颜色混淆。 我find的解决scheme是将SWF设置为“透明”模式,位于z-index:10的<div>处,并在其下方放置一个与SWF文件的相同尺寸的新<div>,填充了不透明的颜色SWF。 这两个div到<a>标签。 这工作。

 Example: <a href="www.mysite.com"> <div id="SWF_file_container" style="width:100px; height:40px; z-index:10;"> <object> .... </object> (adding SWF in TRANSPARENT MODE) </div> <div id="opaquecolor_of_swf" style="width:100px; height:40px; z-index:2; background-color:#ff0000;"></div> </a>