【问题标题】:How to get Facebook live video instance without xfbml.ready?如何在没有 xfbml.ready 的情况下获取 Facebook 实时视频实例?
【发布时间】:2016-08-17 00:04:43
【问题描述】:

我在我的网页上嵌入了一个实时 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”,但触发事件时收到的 msg 只是“1”。

我还尝试将事件处理程序放置在播放器本身执行的事件上,而不是使用 msg.instance,但由于跨源策略问题(Facebook 播放器位于 iFrame 内),这是不可能的。

这篇文章 => Unmute facebook live video 也在问一个与 xfbml.ready not fire 相关的类似问题。

感谢您的帮助。

【问题讨论】:

标签: javascript facebook facebook-javascript-sdk


【解决方案1】:

FB.Event.subscribe('xfbml.ready'... 在 FB.XFBML.parse 上调用,您可以在事件之前强制进行新的解析,仅在您的嵌入视频父级上解析,如下所示:

FB.XFBML.parse(document.getElementById('my-embed-video-id').parentNode);
FB.Event.subscribe('xfbml.ready', function(msg) {
   if(msg.type === 'video'){
    //do something
   }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    相关资源
    最近更新 更多