搜索

  • 好友链接

  • 链接表

  • Meta

    日志分类

    日志归档

    本月top点击

    历史top点击

    27

    又见跨域问题,远程加载图片

    这几天做一个蜂鸟的相册flash,以本地怎么测都没有问题,但是传到服务上就不行了!看了跨域文件也已经设置了!

    真是让人头痛,后来在蓝色上看到一个类似的情况,但是最后没有解决方案,上面说是:

    当使用 Loader 类的 load() 方法加载图像时,可以指定一个 context 参数,该参数是一个 LoaderContext 对象。如果将 LoaderContext 对象的 checkPolicyFile 属性设置为 true,则 Flash Player 将在从其中加载该图像的服务器上检查是否存在跨域策略文件。如果存在跨域策略文件且该文件允许执行加载的 SWF 文件所在的域进行访问,则会允许该文件访问 Bitmap 对象中的数据,否则就不允许。

    这样就找到了一个方向,又看了看帮助文档,最后解决方法如下:

    1. import flash.display.Loader;
    2. import flash.net.URLRequest;
    3. import flash.system.LoaderContext;
    4.  
    5. var lc:LoaderContext = new LoaderContext(true);
    6. var loader:Loader = new Loader();
    7. loader.load(new URLRequest("http://xxxxxxxx/xxxx.jpg"),lc);
    8.  
    9.  
    10. //需要在原来的调用基础增加LoaderContext类;

    最后看一下:checkPolicyFile属性

    checkPolicyFile(NetStream.checkPolicyFile 属性)

    public checkPolicyFile : Boolean

    指定 Flash Player 是否应在开始加载 FLV 文件本身之前,尝试从所加载 FLV 文件的服务器上下载跨域策略文件。当对渐进式视频下载(独立的 FLV 文件)使用 NetStream 时,此标志适用;当使用 NetStream 获取 RTMP 资源时,此标志不适用。

    如果您从执行调用的 SWF 文件所在的域之外加载 FLV 视频文件,并且您希望使用 BitmapData.draw() 访问该图像的内容,请将此标志设置为 true。如果您在加载时没有指定 checkPolicyFile 就尝试执行该操作,您可能会遇到安全错误,这是因为尚未下载所需的策略文件。

    在 checkPolicyFile 被设置为 true 的情况下调用 NetStream.play() 时,Flash Player 在成功下载相关的跨域策略文件后或发现不存在这样的策略文件后才开始下载在对 play() 调用中指定的对象。Flash Player 首先考虑已经下载的策略文件,然后尝试下载在对 System.security.loadPolicyFile() 的调用中指定的任何待下载策略文件,最后尝试从与您传递到 play() 的 URL 对应的默认位置(即 URL 所在的服务器上的 /crossdomain.xml)下载策略文件。在所有情况下,Flash Player 都要求给定的策略文件存在于其服务器上,要求该文件利用策略文件的位置提供对位于您传递到 play() 的 URL 的对象的访问,并允许执行调用的 SWF 文件所在的域利用一个或多个 标签访问该策略文件。

    如果您将 checkPolicyFile 设置为 true,Flash Player 将等待策略文件下载完成后才会开始执行您在 play() 中指定的主下载。这样,只要您需要的策略文件存在,一旦您收到来自 NetStream 的任何 onMetaData 或 onStatus 事件,就说明该策略文件下载已完成,您就可以安全地开始执行需要该策略文件的操作。

    如果您将 checkPolicyFile 设置为 true,并且未找到相关的策略文件,则除非您尝试执行的操作引发了 SecurityError 异常,否则您不会收到任何错误指示。

    如果不需要对正在加载的视频进行像素级的访问,则尽量不要将 checkPolicyFile 设置为 true。在这种情况下检查是否存在策略文件会白白浪费时间,因为这会延迟下载的开始时间,并且可能会不必要地占用网络带宽。

    如果是从可能使用服务器端 HTTP 重定向的 URL 下载 FLV 文件,则使用 checkPolicyFile 时要小心。Flash Player 总是会尝试检索与您在 NetStream.play() 中指定的初始 URL 对应的策略文件。如果最终的 FLV 文件由于 HTTP 重定向而来自不同的 URL,那么最初下载的策略文件可能不适用于该 FLV 文件的最终 URL,而最终 URL 对于安全决策颇为重要。

    相关日志

    1 条评论

    留下评论