我注意到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中的网络选项卡,没有看到任何内容,至少没有任何相关内容。
如何与其他标签进行通信以暂停视频?
答案 0 :(得分:1)
我想这是有责任的:
ytcenter.player.network.pause();
我通过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
函数和一些事件。 _emit
是line 10754上的关键词。这就结束了,包括localStorage
和settimeout
在内部完成了一些魔术。我相信这就是答案。本地存储是共享的,我在途中找到了setInterval
函数。视频暂停后,它会将消息发送到本地存储中,并保留一段时间。其他选项卡会注意到通过setInterval。