我一直在使用Flex加载YouTube AS3播放器:
private function vid_completeHandler():void{
player:Object = new Object;
...
player = vid.content;
}
<controls:SWFLoader id="vid"
complete="vid_completeHandler()"
source="http://www.youtube.com/apiplayer?version=3"/>
在控制台(Flash Builder和Flashdevelop)中始终存在关于沙盒错误的不可阻挡的消息流,但代码无论如何都有效。
现在有些东西已经改变,玩家在加载时会抛出错误:
警告:域gdata.youtube.com未明确指定 元策略,但内容类型的策略文件 http://gdata.youtube.com/crossdomain.xml是 '文/ X-跨域策略'。应用元策略'by-content-type'。
[SWF] /yts/swfbin/player-vfl7UxYqE/apiplayer3.swf - 465,000字节 减压后 ***安全沙箱违规***
SecurityDomain'http://localhost/myDomain/bin_debug/myapp.html?debug=true'尝试过 访问不兼容的上下文 'https://s.ytimg.com/yts/swfbin/player-vfl7UxYqE/apiplayer3.swf'***安全沙箱违规***
SecurityDomain“https://www.youtube.com/apiplayer?version=3”尝试访问不兼容的上下文“https://s.ytimg.com/yts/swfbin/player-vfl7UxYqE/apiplayer3.swf”SecurityError:错误#2121:安全沙箱违规: Loader.content:https://www.youtube.com/apiplayer?version=3不能 访问https://s.ytimg.com/yts/swfbin/player-vfl7UxYqE/apiplayer3.swf。 这可以通过调用Security.allowDomain来解决。
在flash.display :: Loader / get content()
在com.google.youtube.application :: SwfProxy / onRequestParameters()
在flash.events::EventDispatcher/dispatchEventFunction()
在flash.events :::EventDispatcher / dispatchEvent()
在com.google.youtube.model :: YouTubeEnvironment()
在com.google.youtube.application :: VideoApplication / createYouTubeEnvironment()
在 com.google.youtube.application :: VideoApplication / onLoaderInfoInit()
警告:域i.ytimg.com未明确指定元策略, 但是内容类型的策略文件http://i.ytimg.com/crossdomain.xml是 '文/ X-跨域策略'。应用元策略'by-content-type'。
我试图用AS3来解决这个问题,但无法修复它:
var current:ApplicationDomain = ApplicationDomain.currentDomain;
var context:LoaderContext = new LoaderContext();
context.applicationDomain = new ApplicationDomain(current);
var urlLoader:Loader = new Loader();
var url:String = "http://www.youtube.com/apiplayer?version=3";
urlLoader.load(new URLRequest(url), context);
我已经完成了所有必要的 Security.allowDomain 调用,并尝试过以下其他选项:
Security.loadPolicyFile("http://www.youtube.com/crossdomain.xml");
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
context.securityDomain = SecurityDomain.currentDomain;
context.allowCodeImport=true;
有什么办法可以防止他的错误吗? Google / YouTube可能导致此更改?
编辑: YouTube播放器根本没有加载。这是因为我在尝试修复安全错误时错误地移动了'player = vid.content'行。