同じサイズの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>