【问题标题】:How do this script pause youtube videos?这个脚本如何暂停 youtube 视频?
【发布时间】:2014-03-27 14:56:18
【问题描述】:

我注意到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 中的网络选项卡,什么也没看到,至少没有任何相关的内容。

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

【问题讨论】:

    标签: javascript youtube


    【解决方案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 注意到这一点。

    【讨论】:

    • 有趣。我沿着那条线到一个发射器,但我看不到它在做什么。它在网络上做什么? AFAIK AJAX 只能在 google/youtube 网站上运行,所以我不明白它是如何通过网络实现的。我相信 GM_xmlhttpRequest 可能会执行 GET 和 POST 请求,但选项卡如何监听这些网络事件?
    • 这确实是个有趣的问题。所以我又挖了一点,我可能会有答案,所以我会更新当前的。
    猜你喜欢
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 2017-04-11
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 2011-05-16
    相关资源
    最近更新 更多