是否可以在 AS3 中查看从 SWF 下载的 crossdomain.xml?
Posted
技术标签:
【中文标题】是否可以在 AS3 中查看从 SWF 下载的 crossdomain.xml?【英文标题】:Is it possible to view the downloaded crossdomain.xml from SWF in AS3? 【发布时间】:2015-02-02 11:55:18 【问题描述】:当尝试从 SWF 下载远程资源时,它首先下载并检查位于 Web 服务器根目录(或在 loadpolicyfile()
中指定的位置)的 crossdomain.xml 文件.我想从 SWF 中访问下载的 crossdomain.xml 文件。该文件存储在哪里,是否可以从 SWF 中访问?
我将其用作可访问性机制:如果下载了 crossdomain.xml 文件,则 Web 服务器(我知道它正在托管 crossdomain.xml文件)是可访问的。此 Web 服务器可能不允许在其策略文件中使用“*
”,这使我无法简单地请求服务器上其他位置的文件以确定可访问性。
谢谢!
【问题讨论】:
【参考方案1】:以这个加载crossdomain.xml
的例子为例,验证服务器的可达性:
var request:URLRequest = new URLRequest('http://www.fb.com/crossdomain.xml')
var loader:URLLoader = new URLLoader(request)
loader.addEventListener(
Event.COMPLETE,
function(e):void
trace('crossdomain file content : ')
trace(loader.data)
)
loader.addEventListener(
HTTPStatusEvent.HTTP_STATUS,
function(e):void
//trace('http status: ' + e.status)
if(e.status == 200)
trace('this web server is reachable')
)
loader.addEventListener(IOErrorEvent.IO_ERROR, function(e))
loader.load(request)
以 fb.com 为例:
this web server is reachable
crossdomain file content :
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only" />
<allow-access-from domain="s-static.facebook.com" />
<allow-access-from domain="static.facebook.com" />
<allow-access-from domain="*.static.ak.facebook.com" />
<allow-access-from domain="*.static.ak.fbcdn.com" />
<allow-access-from domain="s-static.ak.fbcdn.net" />
<allow-access-from domain="*.static.ak.fbcdn.net" />
<allow-access-from domain="s-static.ak.facebook.com" />
<allow-access-from domain="www.facebook.com" />
<allow-access-from domain="secure.facebook.com" />
<allow-access-from domain="static.ak.fbcdn.net" />
<allow-access-from domain="www.latest.facebook.com" />
<allow-access-from domain="www.inyour.facebook.com" />
<allow-access-from domain="www.beta.facebook.com" />
<allow-access-from domain="m-static.ak.fbcdn.net" />
<allow-access-from domain="fbstatic-a.akamaihd.net" />
<allow-access-from domain="static.xx.fbcdn.net" />
<allow-access-from domain="z-m-static.xx.fbcdn.net" />
<allow-access-from domain="z-1-static.xx.fbcdn.net" />
</cross-domain-policy>
希望对你有帮助。
【讨论】:
你在什么浏览器中执行了这个?我曾尝试使用 HTTP_STATUS 事件,据我所知,浏览器总是返回状态 0。 @zretep 我在许多浏览器中测试过它:firefox、chrome 和 opera,我认为 0 是HTTPStatusEvent.status
的默认值,所以可能是 flash 没有加载任何东西作为安全问题,尝试将SecurityErrorEvent
监听器添加到您的URLLoader
。
@zretep Adobe 谈论 0 :“...... HTTPStatusEvent 对象不一定表示错误情况;它只是反映网络堆栈提供的 HTTP 状态代码(如果有)。某些 Flash Player 环境可能无法检测 HTTP 状态代码;在这些情况下,始终报告状态代码 0。"。
我测试过的每个浏览器都返回零。你说你在 FF、Chrome 和 Opera 中测试过……什么版本(或什么版本的 flash)? “此 Web 服务器可访问”永远不应显示在您提供的代码中。再次感谢您的帮助!
这似乎不适用于不允许来自 *
的网站。这就是为什么我想访问 SWF 请求的策略文件在我使用URLLoader()
提出请求之前。否则,沙盒甚至会阻止我请求 crossdomain.xml 文件本身。以上是关于是否可以在 AS3 中查看从 SWF 下载的 crossdomain.xml?的主要内容,如果未能解决你的问题,请参考以下文章
(swf as3 XML URLLoader) 在 flex 中不起作用
as3 从网络外部加载 swf 以控制从网络外部加载的 swf