Javascript 带有iframe的jquery事件委派

Javascript 带有iframe的jquery事件委派,javascript,jquery,iframe,Javascript,Jquery,Iframe,我有一个网页,有视频图像缩略图。当访问者点击缩略图时,我会动态创建一个覆盖,播放视频。覆盖是一个div,其中包含一个iframe,该iframe具有视频的html标记(html5视频标记)此iframed内容托管在同一网站上,因此不存在跨域问题 我想做的是使用jQuery将视频事件与视频挂钩。此操作的代码位于父页面上。事情是这样的。加载视频后,我可以将其放入控制台,它工作正常: $('body iframe[src*="VideoOverlay"]').contents().find('vide

我有一个网页,有视频图像缩略图。当访问者点击缩略图时,我会动态创建一个覆盖,播放视频。覆盖是一个div,其中包含一个iframe,该iframe具有视频的html标记(html5视频标记)此iframed内容托管在同一网站上,因此不存在跨域问题

我想做的是使用jQuery将视频事件与视频挂钩。此操作的代码位于父页面上。事情是这样的。加载视频后,我可以将其放入控制台,它工作正常:

$('body iframe[src*="VideoOverlay"]').contents().find('video').on('timeupdate',function(){console.log('Time: ',this.currentTime);})
然而,我真正需要做的是在iframe存在之前将其转化为一个委托事件

我试过各种方法,比如

// attempt #1
$('body').on('timeupdate',function(){console.log('Time: ',this.currentTime);});

// attempt #2
$('body').on('timeupdate','iframe[src*="VideoOverlay"]',function(){console.log('Time: ',this.currentTime);})
。。还有一些其他的小变化,但不起作用。我的猜测是,事件不会从子窗口冒泡到父窗口,这对于跨域窗口来说是有意义的,但我认为如果它是同一个域,可能会发生,但它不是(?)

所以。。正如我所认为的,下一个最好的方法是执行某种“iframe已添加”委托事件,然后使用
.contents()…
,但正如我所知,这是一个变异(?)事件,对它的支持有点可疑

所以。。就我所知,下一个最好的方法是检查iframe是否存在,并将其包装在
setInterval
中,但我并不真正喜欢这种解决方案,因为a)这样的事情有性能方面的考虑,b)我需要说明,与视频事件相比,它不是完全定时的。例如,我需要挂接到视频播放(视频自动播放),我可能会错过该事件,以及一定数量的毫秒(无论我的间隔是什么),等等。。看,这使得一些丑陋的编码

所以。。我有点希望,也许我在iFrame中遗漏了一些委托事件,或者如果我的
setTimeout
解决方案在此时真的不是那么糟糕。。想法

编辑更多信息:

我知道有些东西,比如youtube API和其他视频框架,都有处理这些东西的API。这不是youtube vieos或其他API。这是直截了当的。mp4视频托管在我自己的网站上,与父页面的域相同,使用常规html5视频标签。需要注意的是,它是作为单独的iframe内容包含的

我无法控制/无法更改此设置(繁文缛节)


我(也许,同样是繁文缛节)确实有能力将事件处理程序代码放入iframe内容本身,这将解决我的问题,但会引入其他问题。这里的最终目标是触发google analytics跟踪以跟踪视频交互。谷歌分析库位于父页面上。我知道我可以做一些事情,比如
window.parent
,但这也会让事情变得复杂,这也是我想要避免的一个解决方案,因为每个视频都有自己的iframe文件,所以我必须对所有我想要避免的当前和未来视频文件进行更改。

您可以在iframe内专门在父级中触发事件

parent.$('body').trigger('eventName');
这里的功劳是:

在iframe存在之前
。不能,因为它会创建一个新窗口。可以使用iframe的load事件进行事件绑定。postMessage API也可以满足您的需要