【发布时间】:2016-08-19 21:22:58
【问题描述】:
我们有一个浏览器 Flash 应用程序,它加载 YouTube 嵌入式 AS3 播放器来播放一些 YouTube 视频 (https://developers.google.com/youtube/flash_api_reference)
是的,我知道 Flash API 已被弃用,Flash 正在消亡等,但它是目前我们复杂的 3D 图形创作工具的唯一实用平台,就像播放 YouTube 视频的一个功能一样;强迫我们的客户在 Vimeo 上托管他们的视频来回答这个问题是很疯狂的。
到目前为止一切正常(代码或服务器没有变化),直到 2 周前,我们无法通过应用播放 YouTube 视频。
我发现我们目前使用的 url 格式给出了一个未找到文件的错误:
http://www.youtube.com/v/<my video code>?version=3&autoplay=1
经过一番调查,谷歌似乎更新了他们的 API 服务terms of service。
因此,按照他们页面中的一些说明,我将 http 更改为 https:
https://www.youtube.com/v/<my video code>?version=3&autoplay=1
当我的应用尝试使用该 url 加载 YouTube 播放器时,Event.COMPLETE 事件被触发并且播放器数据似乎加载正常,但在 YouTube 播放器分配给 var 的这一部分:
private function onLoaderComplete(e:Event):void {
var player = e.currentTarget.content;
....
}
它会抛出以下错误:
*** Security Sandbox Violation ***
SecurityDomain http://<my app url> tried to access incompatible context 'https://www.youtube.com/v/<my video code>?version=3&autoplay=1'
SecurityError: Error #2121: Security sandbox violation: LoaderInfo.content: http://<my app url> cannot access https://www.youtube.com/v/<my video code>?version=3&autoplay=1. This may be worked around by calling Security.allowDomain.
我已经设置了所有我能想到的Security.allowDomain和Security.allowInsecureDomain(*.youtube.com、*.ytimg.com、https ://www.youtube.com、https://s.ytimg.com等以及我能想到的http和https的任何变体) .所以我认为这不是问题。
我尝试了thread 中的解决方案,建议使用此行来解决错误 #2121:
loaderContext.securityDomain = SecurityDomain.currentDomain;
现在它甚至不会触发 Event.COMPLETE 事件。只有SecurityErrorEvent.SECURITY_ERROR 事件,所以没有加载任何内容:
*** Security Sandbox Violation ***
Connection to https://www.youtube.com/v/<my video code>?version=3&autoplay=1 halted - not permitted from http://<my app url>
httpStatus (error): [HTTPStatusEvent type="httpStatus" bubbles=false cancelable=false eventPhase=2 status=0 redirected=true responseURL=null]
SecurityError:
[SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048: Security sandbox violation: http://<my app url> cannot load data from https://www.youtube.com/v/<my video code>?version=3&autoplay=1."]
所以我认为这是一个倒退。
我认为这可能是 HTTP 到 HTTPS 的问题,但另一方面,直接加载 YouTube Chromeless AS3 播放器 API(没有播放/停止和时间线控件)工作正常:
https://www.youtube.com/apiplayer?version=3&video_id=<my video code>
任何有用的提示将不胜感激。
【问题讨论】:
-
您在测试什么浏览器?我知道,从几个月前开始,Firefox 开始期望所有加载外部数据的 Flash 应用程序都从 HTTPS 服务器运行。其他浏览器可能已经效仿。最简单且面向未来的解决方案是将您的服务器更新为 HTTPS。您的主机或站点的控制面板可能已经允许简单的“启用 HTTPS”设置。与他们核实。
-
PS:不知道为什么无铬版本会通过(不要依赖于持久性)。然而,既然它有效,你能不能只花一两天时间制作自己的自定义播放/暂停/搜索控件?
-
您找到解决方案了吗?我的 Flash 应用程序也有同样的问题。
标签: actionscript-3 flash youtube youtube-api youtube-data-api