【发布时间】:2013-07-15 22:11:03
【问题描述】:
我有一个带有嵌入式 YouTube Flash (AS3) 播放器的网站,但它不再在 Safari 中运行。
查看this fiddle,其代码仅为:
<object type="application/x-shockwave-flash"
data="http://www.youtube.com/apiplayer">
</object>
在 Chrome、Firefox 和 IE 中,对http://www.youtube.com/apiplayer 的请求正常返回 (200)。在 Safari 中,服务器向https://youtube.googleapis.com/apiplayer 返回一个 303。
该播放器已加载,但我无法在 JavaScript 中与之交互。我认为这是因为它是通过 https 提供的——尽管我明确地请求 http——导致了混合模式的安全问题。这是我在尝试对播放器执行任何操作时看到的错误(这是完整的无铬播放器嵌入代码):
>>> player.playVideo()
Error: Error calling method on NPObject.
如果我将 Safari 的用户代理更改为其他内容,或者只是修改了“Safari”这个词,那么就会加载正确的播放器。我也可以轻松加载 Vimeo 和 Viddler 播放器(http://vimeo.com/moogaloop.swf 和 http://www.viddler.com/player/key)。
我在稳定的 Safari 版本和每晚的 WebKit 中都看到了这一点。它也发生在我的扩展被禁用和处于隐私浏览模式时。
我尝试通过嵌入 http://youtube.googleapis.com 来解决这个问题,希望不会有重定向,我会通过 http 获取播放器。但它仍然会重定向到 https,并且在所有浏览器中都会这样做。
我上周提交了this YouTube API ticket,但到目前为止没有任何回复。
【问题讨论】:
-
我不认为这会在 YouTube 方面引起太多关注......毕竟这不是一个错误,而是一个设计选择(就像你有一个特定的用例一样阻止您使用 https 或切换到 iFrame API,Youtube 有特定原因不想通过不安全的连接提供播放器)。也许您可能会在您的终端设置一个小的本地代理,它可以通过 https 接收内容,然后通过 http 将它们提供给您的应用程序?
-
谢谢,这很好。我认为这可能是故意的,但我还没有看到任何证实这一点的东西。为什么只有 Safari?为什么它没有记录在任何地方?代理的想法很聪明;我认为在我的情况下,我会先使用其他解决方法之一,但它可能会起作用。
-
iFrame 是我发现获得可靠的跨浏览器 Youtube 嵌入的最佳方式。 iFrame 方法会给您带来什么问题?
-
我遇到了同样的问题,我需要让无铬播放器工作。 iFrame 不适合我,因为我需要一个绝对无品牌的播放器,这只能通过无铬合金来实现。 iFrame 将始终在视频末尾显示标题和播放按钮,无论指定的参数如何……我尝试在 Safari 中使用不同的用户代理,一切正常。对此有一些见解会很好。您可以在以下位置查看示例:link
标签: safari youtube webkit youtube-api youtube-javascript-api