这个脚本如何暂停youtube视频?

时间:2014-03-27 14:56:19

标签: javascript youtube

我注意到this userscript(由于充分的理由相当受欢迎)每当我按下此标签中的视频播放时,在另一个标签上暂停视频。来源被缩小了,但看起来就是这样 https://github.com/YePpHa/YouTubeCenter/blob/master/src/YouTubeCenter.user.js

我不知道从哪里开始所以我搜索了所有'暂停'的实例。我认为第22801行是它,但我不再这么认为。我也无法理解发生的事情。在控制台中输入ytcenter._intercomOnPlayer给了我undefined。它下面有8行(22809),它说" ytcenter._intercomOnPlayer"所以我不认为我在读正确的区域。我看到" @grant GM_xmlhttpRequest"。我查看了firebug中的网络选项卡,没有看到任何内容,至少没有任何相关内容。

如何与其他标签进行通信以暂停视频?

1 个答案:

答案 0 :(得分:1)

我想这是有责任的:

ytcenter.player.network.pause();

line 22893

我通过wiki github链接https://github.com/YePpHa/YouTubeCenter/wiki/Features#Only_One_Player_Instance_Playing在我正在寻找的代码中找到它“Only_One_Player_Instance_Playing”短语

同样在我看来,标签当然无法相互通信。它必须通过youtube api来完成......

<强>更新

我们有一个新问题。该行ytcenter.player.network.pause()如何运作?

我无法自己运行代码。有一些错误,我太懒了解决它。但我遵循pause方法。首先我认为它是youtube api的原生功能,但我错了。它是line 18600。里面是另一个关键

intercom.emit("player", {
        action: "pause",
        origin: intercom.origin
      });

更深入emit功能。您可以猜到,emit也不是youtube API的原生功能。它调用_emit函数和一些事件。 _emitline 10754上的关键词。这就结束了,包括localStoragesettimeout在内部完成了一些魔术。我相信这就是答案。本地存储是共享的,我在途中找到了setInterval函数。视频暂停后,它会将消息发送到本地存储中,并保留一段时间。其他选项卡会注意到通过setInterval。