由于 YouTube API 无法以编程方式触发全屏(显然有充分的理由,与旧版 Flash 支持有关,如此处所述),我只需使用 HTML5 Element.requestFullscreen API 来全屏播放器 IFrame 即可。
不幸的是,如果用户在 YouTube 播放器中触发全屏,则播放器本身会全屏而不是 IFrame,并且不会产生任何事件来表明它已经这样做了。当应用程序的其余部分不知道什么是全屏和不再是全屏时,这会破坏我的 UI 并导致其他同步问题。部分解决方案是使用无铬播放器,然后渲染我自己的播放器控件,这样用户就无法单击 YouTube 全屏按钮 - 但是,事实证明,双击 YouTube 视频也会使其进入全屏模式,再次无法向应用程序的其余部分发出它已经这样做的信号。
那么,在不影响其他功能的情况下,是否有任何一致的方法可以防止嵌入式 YouTube 播放器在任何情况下全屏显示?
到目前为止,我最好的解决方案是在 iframe 上设置 pointer-events:none 。然而,这并不是很完美,因为它也使得不可能消除显示在 YouTube 视频上的广告横幅。一个理想的解决方案是阻止“双击全屏”响应,而不会弄乱其他任何东西。(例如,单击播放就可以了,因为 YouTube 播放器确实会发出播放事件,让我让应用程序的其余部分保持同步。)