35

我在一个 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>
4

8 回答 8

86

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

  1. 将参数设置wmodetransparent. 这允许包含 flash 的对象接收 javascript onclick
  2. 使用onmousedowninsted 的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>

它可以满足我的需要 =)

于 2010-11-14T23:25:18.190 回答
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 的替代解决方案。

于 2009-09-18T13:51:28.747 回答
2

flash 几乎可以肯定不会将 click 事件传播到其父级。我想,除非你写了 flash,否则你什么都做不了。

于 2009-09-18T13:33:55.857 回答
2

flash 对象将始终捕捉点击,而不是自动传递它。您将必须构建该功能 - 在 flash 中捕获 onclick 并调用 JS 函数。

你想达到什么目的?

于 2009-09-18T13:35:04.810 回答
2

试试这个简单的解决方案,用 div 覆盖 flash 并将 click 事件放在顶部 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');">&nbsp;</div>
</div>
于 2011-02-22T06:02:31.073 回答
1

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

于 2010-10-25T06:21:14.203 回答
1
<param name="wmode" value="transparent" />

这就是我的解决方案。好吧,我在参数的 AC_RunActiveContent.js 上实现了它:

'wmode', 'transparent',

好的!!!

于 2011-09-15T02:58:32.053 回答
1

当我尝试制作自动动态放置的横幅时,我遇到了这个问题。如果 SWF 设置为“opaquecolor”模式,那么我将无法接受点击 - 我不得不使用 opaquecolor,因为某些横幅与网站颜色混淆了。我找到的解决方案是将 SWF 设置为“透明”模式,在 z-index:10 的 <div> 处,并在其下方放置一个与 SWF 文件相同尺寸的新 <div>,填充不透明色主权财富基金。两个 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>
于 2011-11-04T14:10:37.400 回答