我在一个div中有一个嵌入flash影片,我在主div中放了一个javascript onclick事件处理程序,但是没有抓到点击,有什么问题?
代码:
<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>
答案 0 :(得分:86)
我在http://progproblems.blogspot.com/2009/08/javascript-onclick-for-flash-embeded.html
找到了这个wmode
设置为transparent
。这允许包含flash的对象接收javascript onclick
。onmousedown
onclick
。尽管使用了wmode
transparent
,但某些浏览器仍然无法调用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>
它符合我的需要=)
答案 1 :(得分:21)
最好将所有swf视为具有无穷大的z阶。 Flash位于顶部,可以做很少的事情来阻止它。另一方面,如果您可以访问SWF本身的代码,或者如果您可以使用另一个swf来加载当前的swf,那么您将能够使用几个不同的Flash命令来处理页面的JavaScript 。 (ExternalInterface是你最好的选择)。
//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的另一种替代解决方案。
答案 2 :(得分:2)
闪存几乎肯定不会将click事件传播到其父级。我想,除非你写下闪光灯,否则你无能为力。
答案 3 :(得分:2)
flash对象将始终捕获点击而不会自动传递它。你将不得不构建该功能 - 在flash中捕获onclick并调用JS函数。
你想要完成什么?
答案 4 :(得分:2)
尝试这个简单的解决方案用div覆盖flash并将click事件放在top div上,这样flash就永远不会抓住鼠标。
<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');"> </div>
</div>
答案 5 :(得分:1)
在对象标记上执行onclick事件。 (对象标签支持鼠标事件)。然后通过DOM获取父div。
答案 6 :(得分:1)
<param name="wmode" value="transparent" />
这是我的解决方案。好吧,我在params的AC_RunActiveContent.js上实现了它:
'wmode', 'transparent',
尼斯!!!
答案 7 :(得分:1)
当我尝试制作自动动态展示横幅广告时,我遇到了这个问题。如果SWF被设置为'opaquecolor'模式,那么我没有点击接受 - 我不得不使用opaquecolor,因为一些横幅搞乱了网站的颜色。我找到的解决方案是将SWF设置为'透明'模式,在&lt; div&gt; z-index:10,并在其下面放置一个新的&lt; div&gt; SWF文件的相同尺寸,填充了SWF的opaquecolor。两者都成为&lt; a&gt;。标签。这很有用。
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>