如何将函数绑定到嵌入的单击事件

How to bind a function to click event on an embed

我正在尝试将一个函数绑定到嵌入(Flash 文件)上的点击事件。但问题是支持,所以我正在寻找跨浏览器的解决方案。第一个想法是将 onclick 属性添加到嵌入元素,但在 Chrome (v. 59.0.3071.115) 中永远不会触发点击事件,或者 onclick 不工作...

代码 1:

<embed onclick='myFunction(myOpts)'
       class="item" 
       src="/file.swf">

function myFunction(myOpts){
    console.log('is working!!!!');
}

以上代码不适用于 Chrome。所以,我正在考虑以一种新的方式在点击事件上调用此函数:具有 onclick 属性的父级 div 并使用 javascript 触发嵌入点击(播放 Flash),这是代码:

代码 2:

<embed onclick='myFunction(myOpts, event)'
       class="item" 
       src="/file.swf">

function myFunction(myOpts, event){
    console.log('is working!!!!');
    event.target.getElementsByTagName('embed')[0].click();
}

但是永远不会触发嵌入的点击...所以,我的问题:

有没有办法通过嵌入的点击事件调用函数?如果答案是肯定的,那么在不影响他的行为的情况下调用函数的最佳方式是什么?

如果需要获取当前元素,在onClick函数中传递this

然后你就可以在myFunction里面调用element.click()了。

onClick="myFunction('test', this)"

function myFunction(myOpts, element) {

    console.log(element, 'is working!!!!');
    // calling here element.click() will trigger myFunction twice
}

对于那些寻找答案的人,这就是我所做的:

现在我使用 object 标签来显示 Flash 文件 而不是 只是 embed 标签:

<object id="objectId" classid="clsid:D27CDB6E-AE6D-11cf-96BB-444553540000"  onmouseup="myFunction(myOpts)"
      name="objectName" type="application/x-shockwave-flash" data="flash.swf" width="100%" height="100%">
      <param name="movie" value="flash.swf"/>
      <param name="quality" value="high"/>
      <param name="allowscriptaccess" value="always"/>
      <param name="wmode" value="transparent"/>
      <embed src="flash.swf" wmode="transparent" width="100%" height="100%" allowscriptaccess="always"
      allowfullscreen="true" name="embedName" id="embedId" data="flash.swf">
      </embed>
</object>

为了调用 myFunction() 而不会丢失我使用 onmouseup 而不是 onclick 的 Flash 文件的行为。