web-dev-qa-db-ja.com

Flashオブジェクト上のjavascript onclickイベント

Flashムービーを1つのdivに埋め込み、メインdivにjavascript onclickイベントハンドラーを1つ配置しますが、クリックがキャッチされないのは何が問題ですか?

コード:

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

すべてのswfのZオーダーが無限であると考えるのが最善です。フラッシュが上にあり、それを止めるためにできることはほとんどありません。一方、SWF自体のコードにアクセスできる場合、または別のswfを使用して現在のswfをロードできる場合は、ページのJavaScriptに対処するためにいくつかの異なるFlashコマンドを使用できます。 。 (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" );
}

Onclickの代わりにonmousedownを使用する別の代替ソリューションは、以下のDarwinによって提供されます。

21
cwallenpoole

私はこれを http://progproblems.blogspot.com/2009/08/javascript-onclick-for-flash-embeded.html で見つけました

  1. パラメーターwmodetransparentに設定します。これにより、フラッシュを含むオブジェクトがjavascript onclickを受信できるようになります。
  2. onmousedownの代わりにonclickを使用します。 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>

私のニーズに合っています=)

86
Darwin

この簡単な解決策を試して、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>
2
Tahir

ほとんどの場合、フラッシュはクリックイベントをその親に伝達しません。フラッシュを書いていない限り、あなたは何もできません。

2
Tor Haugen

flashオブジェクトは常にクリックをキャッチし、自動的にクリックを渡すわけではありません。その機能を構築する必要があります-onclickをフラッシュでキャッチし、JS関数を呼び出します。

何を達成しようとしていますか?

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

これが私にとっての解決策でした。さて、paramsでAC_RunActiveContent.jsに実装しました:

'wmode', 'transparent',

いいね!!!

1
Yagarasu

オブジェクトタグでonclickイベントを実行します。 (オブジェクトタグはマウスイベントをサポートしています)。次に、DOMを介して親divを取得します。

1
Elijan Sejic

自動化された動的配置バナーを作成しようとしたときに、この問題が発生しました。 SWFが「不透明色」モードに設定されている場合、クリック可能なクリックはありませんでした。また、一部のバナーがWebサイトの色で台無しになったため、不透明色を使用する必要がありました。私が見つけた解決策は、z-index:10の<div>でSWFを「transparent」モードに設定し、その下に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>
1
vkp