是否可以在 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 Adob​​e 谈论 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

是否可以从命令行发布 FLA?

从外部或从库中导入声音? AS3

如何使用 Flash (AS3) 从远程域调用 Flex SWF?

ActionScript 3 AS3从URL加载外部SWF