2009-09-18 44 views
35

我有一个嵌入Flash影片里面一个div,我把一个JavaScript onclick事件处理程序在主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

见http://stackoverflow.com/questions/33459/how-do-you-use-a-flash-object-as-a-link – voyager 2010-05-10 14:10:25

回答

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

另一种使用onmousedown而不是onclick的替代解决方案由Darwin在下面提供。

+0

我尝试在闪光与 on(release){getURL(“javascript:highlightform()”); }和工作正常!但你的解决方案也是有效的,所以谢谢! – Pedro 2009-09-18 14:09:27

2

闪光灯几乎可以肯定不会传播click事件给它的父。我想,除非你写了闪光灯,否则你什么也做不了。

2

flash对象将始终捕获点击并且不会自动传递它。你将不得不建立这个功能 - 捕捉Flash中的onclick并调用JS函数。

你想完成什么?

+0

我想更改CSS类的其他页面对象,当我们点击瑞士法郎 – Pedro 2009-09-18 13:41:10

1

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

86

,我发现这个在http://progproblems.blogspot.com/2009/08/javascript-onclick-for-flash-embeded.html

  1. wmode设置参数去transparent。这允许包含Flash的对象接收javascript onclick。使用onmousedownonclick。尽管使用了wmodetransparent,但某些浏览器仍然不会拨打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> 

这对我的工作需要=)

+0

http://stackoverflow.com/questions/6273966/detect-flash-object-click-in-javascript/6276394#6276394 – 2011-06-08 09:18:12

+0

很好的答案达尔文! – Eric 2012-07-13 15:00:23

+1

谢谢!作为后续,使用mousedown的一个区别是,它将通过右键单击和左键单击来触发,使右键单击弹出Flash上​​下文菜单,以及无论您的点击监听器会做什么。所以这个答案可能有助于那些希望阻止右键单击的人。 http://stackoverflow.com/questions/9521519/how-can-i-detect-a-rightmouse-button-event-on-mousedown – heff 2013-07-31 22:55:27

2

试试这个简单的解决方案覆盖DIV闪光灯,把click事件上顶格因此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');">&nbsp;</div> 
</div> 
1
<param name="wmode" value="transparent" /> 

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

'wmode', 'transparent', 

不错!

1

我试图制作自动动态放置的横幅时遇到了这个问题。如果SWF设置为“不透明颜色”模式,那么我没有点击可接受 - 我必须使用不透明颜色,因为有些横幅与网站颜色混淆。我发现的解决方案是将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>