【问题标题】:Is it possible to view the downloaded crossdomain.xml from SWF in AS3?是否可以在 AS3 中查看从 SWF 下载的 crossdomain.xml?
【发布时间】:2015-02-02 11:55:18
【问题描述】:

当尝试从 SWF 下载远程资源时,它首先下载并检查位于 Web 服务器根目录(或在 loadpolicyfile() 中指定的位置)的 crossdomain.xml 文件.我想从 SWF 中访问下载的 crossdomain.xml 文件。该文件存储在哪里,是否可以从 SWF 中访问?

我将其用作可访问性机制:如果下载了 crossdomain.xml 文件,则 Web 服务器(我知道它正在托管 crossdomain.xml文件)是可访问的。此 Web 服务器可能不允许在其策略文件中使用“*”,这使我无法简单地请求服务器上其他位置的文件以确定可访问性。

谢谢!

【问题讨论】:

    标签: xml actionscript-3 flash actionscript


    【解决方案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 文件本身。
    猜你喜欢
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多