同じサイズのFlashオブジェクトの上にcanvas要素を配置しました。canvas要素をクリックして、そのイベント(より正確には、そのイベントの模倣)を下のFlashオブジェクトにディスパッチできるようにしたいと思います。
イベントリスナーをFlashオブジェクトに追加したので、イベントがFlashオブジェクトに正常にディスパッチされていることがわかります。問題は、Flashオブジェクトが単にそれに反応しないことです(たとえば、巨大な「再生」ボタンの領域をクリックしてもビデオは再生されません)。
Flashオブジェクトはこの方法でイベントに反応できますか?DOMのFlashについて、応答をアクティブ化するためにJavaScriptイベント委任以外のものを必要とする特別なものはありますか?
<!DOCTYPE html>
<html lang = "en">
<頭>
<meta charset = "utf-8" />
<title>クリックイベントをDOM要素から基になるFlashオブジェクトに委任する</title>
</ head>
<本体>
<object type = "application / x-shockwave-flash" name = "StrobeMediaPlayback" data = "assets / StrobeMediaPlayback.swf" width = "640" height = "480" id = "StrobeMediaPlayback" style = "visibility:visible; position :絶対;上:0;左:0; ">
<param name = "allowFullScreen" value = "true">
<param name = "wmode" value = "transparent">
<param name = "flashvars" value = "src = http://mediapm.edgesuite.net/strobe/content/test/AFaerysTale_sylviaApostol_640_500_short.flv&autoPlay=false&verbose=true&controlBarAutoHide=false&controlBarPosition=bottom&poster=assets/images/StrobeMediaPlayback.png">
</ object>
<script type = "text / javascript">
var smp = document.getElementById('StrobeMediaPlayback');
smp.addEventListener('click'、function(e){console.log('CLICK');}、false);
addCanvas();
関数addCanvas(){
canvas = document.createElement('canvas');
canvas.width = 640;
canvas.height = 480;
canvas.style.position='絶対';
canvas.style.top = '0px';
canvas.style.left = '0px';
canvas.addEventListener('click'、function(e){evt(smp、e);}、false);
ctx = canvas.getContext( '2d');
document.body.appendChild(canvas);
}
関数evt(el、e){
var event = document.createEvent('HTMLEvents');
event.initEvent(e.type、true、true);
for(var key in e){
event [key] = e [key];
}
el.dispatchEvent(event);
}
</ script>
</ body>
</ html>