我有一个包含视频图像缩略图的页面。当访问者点击缩略图时,我有一个动态创建的叠加层,用于播放视频。叠加层是一个div,其中包含一个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);})
..以及其他几个小变化,但它不起作用。我的猜测是,事件不会从子窗口冒泡到父窗口,这对于跨域窗口是有意义的,但我想也许如果它是相同的域,但它没有&#39 ; t(?)。
所以...接近我认为接下来最好的事情就是做一些" iframe已被添加"委托事件,然后使用.contents()...
,但据我所知,这是一个变异(?)事件,对它的支持有点阴暗。
所以......我可以说,接下来最好的事情就是检查iframe的存在并将其包装在setInterval
中,但我不太喜欢这个解决方案,因为a)像这有性能方面的考虑,b)我需要说明它与视频事件相比并不完美。例如,我需要挂钩视频播放(视频是自动播放的),我可能会错过那个事件,并且会有一定的毫秒数(无论我的间隔是什么)等等。现在它会造成一些难看的编码......
所以..我希望我可能会在iframes中首先失去委托事件,或者如果我的setTimeout
解决方案确实是这方面的小恶魔时间......想法?
修改详情:
我知道像youtube API和其他视频框架这样的东西都有处理这些东西的API。这不是youtube vieos或其他一些API。它是直接.mp4视频托管在我自己的网站上,与父页面相同的域名,使用常规的html5视频标签。需要注意的是,它作为单独的iframe内容包含在内。
我没有控制/能力来更改此设置(繁文缛节)。
我(也许 - 再次,繁文缛节)做能够将事件处理程序代码放入iframe内容本身,这将解决我的问题,但会引入其他问题。这里的最终目标是触发谷歌分析跟踪以跟踪视频交互。谷歌分析库位于父页面上。我知道我可以做window.parent
这样的事情,但这也使事情变得复杂,这也是我想避免的解决方案,因为每个视频都有自己的iframe文件所以我必须对我想要避免的所有现在和将来的视频文件..
答案 0 :(得分:-1)
您可以在iframe中专门触发父级中的事件。
parent.$('body').trigger('eventName');