【发布时间】:2015-01-07 22:32:33
【问题描述】:
不幸的是,当您直接点击 YouTube 播放器本身时,YouTube 只会计算视频的观看次数。这是为了防止欺诈性的高观看次数。如果您不想一开始就显示 YouTube 播放器,一种方法是使用 pointer-events: none 在顶部放置一个不透明的叠加层和图形。当用户点击您的叠加层时,他们实际上会点击 YouTube 视频,因此会计算观看次数。然后,您捕获“正在播放”事件并隐藏覆盖层,露出下面的播放器。
我的主页上有一张图片,当您点击它时,它会播放 YouTube 视频。在有人喊“点击劫持”之前,我并不是要欺骗任何人 - 图形中有一个播放按钮,所以你知道这是一个视频。
这对我来说完全适用,除了 Mac OS 上的 FireFox。我在测试中使用的是最新版本 - 目前是 34.0.5。
演示页面:http://www.googledrive.com/host/0B3INRRYhLi7cVHNKTzhMdnRjT3M
-
如果您在 Chrome / FireFox Windows / 最近的 IE 版本中运行它并单击绿色覆盖层,视频将播放并且您会听到音乐。
-
注意:当然,在我的真实页面中,我会捕获
isplaying事件并隐藏叠加层。
Firefox 显然在做某种点击劫持保护。如果它认为您试图通过覆盖视频来欺骗用户,那么它就不会播放它。然而,对我来说真的很奇怪,它在 Windows 上也没有这样做。
有两种方法可以让视频在 Mac FireFox 上播放 - 都涉及部分显示下面的 Youtube 视频:
- 如果您单击“将不透明度更改为 75%”,它将在下方显示视频。如果您然后单击它,那么它会正常播放。
- 如果您单击“缩小叠加层”,则会使叠加层无法完全覆盖视频。点击它就可以正常播放了。
最奇怪的是——当你在 iframe 中查看它时,它工作得很好(这就是为什么我在上面使用 GoogleDrive link 来打开全屏)而不是像 codepen/jsfiddle http://codepen.io/anon/pen/GgrZNN
我真的在寻找不涉及if (firefox && mac) 的解决方法。如果这在 Mozilla 文档中的某处有记录,我还没有找到它。
附言。显然,没有pointer-events 的浏览器必须通过点击事件区别对待。此示例中未显示。
(我正在使用 Browserstack.com 进行测试,但在真正的 mac 上也是如此。)
【问题讨论】:
-
如果您没有收到任何答案,我建议您在加州工作时间通过 irc.mozilla.orc #firefox 联系 FF 开发人员。
-
我在 mac osx Yosemite 上运行 34.0.5 并且运行良好。重置您的浏览器?
-
@NicholasYoung 感谢您的测试。我没有 mac,但在我的老板 mac 和 Browserstack 上它都不起作用。只是为了确认您是说您打开页面并单击绿色并立即播放音乐?有没有 adblock/noscript 之类的插件?
-
@Simon_Weaver 我的 Firefox 完全没有任何插件,我在 34.0.5 打开它点击绿色框,视频开始播放
-
@NicholasYoung 您点击的是 google 链接而不是 codepen 链接。由于某种原因,框架集允许它在 codepen 链接中工作。如果您单击 googledrive 链接,它应该会失败