我在我的网页上嵌入了一个直播的Facebook视频,需要在视频上放置事件处理程序。例如,我想知道视频是否已暂停。
使用常规视频(非实时)视频,我可以通过使用Facebook文档中列出的方法订阅活动来完成此操作。以下是文档:https://developers.facebook.com/docs/plugins/embedded-video-player/api和我的示例代码:
FB.Event.subscribe('xfbml.ready', function (msg) {
if (msg.type === 'video') {
fplayer = msg.instance;
fplayer.subscribe('paused', facebookPauseEventHandler);
}
});
问题是,当嵌入实时视频而不是“按需”或预先录制的视频结束时,xfbml.ready事件永远不会触发。这是有害的,因为您需要响应,在本例中为“msg”,以便订阅Facebook事件。
我尝试使用'xfmbl.rendered',但是当事件被触发时收到的消息只是'1'。
我也曾尝试将事件处理程序放在玩家自己使用msg.instance进行的事件上,但由于交叉来源政策问题(Facebook播放器位于iFrame内),这是不可能的。
这篇文章=> Unmute facebook live video也提出了一个与xfbml.ready无法解雇有关的类似问题。
谢谢你的帮助。
在FB.XFBML.parse上调用FB.Event.subscribe('xfbml.ready'...
,你可以在事件之前强制执行一个新的解析,只解析你的嵌入视频父类,如下所示:
FB.XFBML.parse(document.getElementById('my-embed-video-id').parentNode);
FB.Event.subscribe('xfbml.ready', function(msg) {
if(msg.type === 'video'){
//do something
}
});