flash – 加载crossdomain.xml策略文件时如何处理网络故障?
我在我们的Flash游戏中监控(并记录到服务器)大多数用户错误.我经常看到与尝试向跨域URL(通常是Facebook Graph API)发出请求相关的安全性错误. 99%的玩家可以毫无问题地进行这些图形API调用.
我认为发生的是客户端发出请求,但无法加载crossdomain.xml文件.我不太清楚AS3在加载跨域策略文件失败的情况下如何处理这个问题…它是否会重试每个URLRequest,直到它成功加载它,或者它是否只是永远放弃?响应此类安全错误的“最佳做法”是什么? 我提前一次预加载Facebook政策文件,如下所示: // allow images to be loaded from facebook and facebook's cdn's. Security.loadPolicyFile( "http://www.facebook.com/crossdomain.xml" ); Security.loadPolicyFile( "https://api.facebook.com/crossdomain.xml" ); Security.loadPolicyFile( "https://graph.facebook.com/crossdomain.xml" ); Security.loadPolicyFile( "http://profile.ak.fbcdn.net/crossdomain.xml" ); 然后我在制作URLRequest时再次检查策略文件. 解决方法
这是一个似乎有效的解决方案.
假设您正在使用URLLoader从其中一个具有crossdomain.xml文件的域中读取数据,并且您正在调用loadPolicyFile来预加载crossdomain.xml,则负载可能会因网络连接问题或来自网络连接问题而失败.服务器停机或太阳耀斑.设置URLLoader时,可以为SecurityErrorEvent.SECURITY_ERROR添加事件侦听器.在even listener中,您可以尝试再次加载策略文件.虽然策略文件已缓存,即使它们无法加载(感谢adobe),因此您必须添加缓存清除查询参数. 这是一个如何工作的简单示例: public function loadMyFriends():void { var urlLoader:URLLoader = new URLLoader(); urlLoader.addEventListener( SecurityErrorEvent.SECURITY_ERROR,handleSecurityError); urlLoader.load(new URLRequest('https://graph.facebook.com/me/friends')); } private function handleSecurityError(event:Event):void { Security.loadPolicyFile( "https://graph.facebook.com/crossdomain.xml?__cb"=Math.random()); loadMyFriends(); } 在实践中,您可能希望限制重试次数,如果它确实是网络连接问题而不是仅仅是负载平衡器未正确处理的死服务器,则可能会执行指数退避. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |