2009-09-18 184 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>