这个脚本如何暂停youtube视频

How do this script pause youtube videos?

本文关键字:暂停 youtube 视频 脚本 何暂停      更新时间:2023-09-26

我注意到这个用户脚本(这是相当流行的很好的理由)暂停视频在另一个标签,每当我按下播放视频在这个标签。源头被缩小了,但看来就是这里了https://github.com/YePpHa/YouTubeCenter/blob/master/src/YouTubeCenter.user.js

我不知道从哪里开始,所以我搜索'pause'的所有实例。我以为22801行是,但现在不这么认为了。我也不明白发生了什么。打字ytcenter。控制台的_intercomOnPlayer给了我undefined。在它下面8行(22809),它说"ytcenter"。所以我觉得我读错了地方。我看到"@grant GM_xmlhttpRequest"。我看了看firebug的网络选项卡,什么也没看到,至少没有任何相关的内容。

它如何与另一个选项卡通信以暂停视频?

我想这是负责任的:

ytcenter.player.network.pause();
第22893行

我发现它通过维基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的原生功能,但我错了。是18600行。里面是另一个键

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

更深入地指向emit函数。可以猜到,emit也不是youtube API的原生函数。它调用_emit函数和一些事件。_emit是10754行的关键字。这是结束,一些魔术在内部完成,包括localStoragesettimeout。我相信这就是答案。本地存储是共享的,我在路上看到了setInterval函数。一旦视频暂停,它就会向本地存储发送消息,这些消息只会保存很短的一段时间。其他选项卡将通过setInterval注意到。