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>
すべての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によって提供されます。
私はこれを http://progproblems.blogspot.com/2009/08/javascript-onclick-for-flash-embeded.html で見つけました
wmode
をtransparent
に設定します。これにより、フラッシュを含むオブジェクトが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>
私のニーズに合っています=)
この簡単な解決策を試して、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');"> </div>
</div>
ほとんどの場合、フラッシュはクリックイベントをその親に伝達しません。フラッシュを書いていない限り、あなたは何もできません。
flashオブジェクトは常にクリックをキャッチし、自動的にクリックを渡すわけではありません。その機能を構築する必要があります-onclickをフラッシュでキャッチし、JS関数を呼び出します。
何を達成しようとしていますか?
<param name="wmode" value="transparent" />
これが私にとっての解決策でした。さて、paramsでAC_RunActiveContent.jsに実装しました:
'wmode', 'transparent',
いいね!!!
オブジェクトタグでonclickイベントを実行します。 (オブジェクトタグはマウスイベントをサポートしています)。次に、DOMを介して親divを取得します。
自動化された動的配置バナーを作成しようとしたときに、この問題が発生しました。 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>