框架运行时共享库 module载入失败 一种解决方法

该文章 2009.7.28日被修改

flex3 框架运行时共享库和module一起使用的时候会出现一些module载入失败的问题,下面和大家分享一下其中我碰到的一个问题的解决方法。

首先说明一下问题发生的背景:
我有一个编译的flex工程,主文件是main.swf,moduleA.swf(module文件)会被main.swf载入。我把main.swf,framework_3.2.0.3958.swf,framework_3.2.0.3958.swz,moduleA.swf部署在 www.a.com/assets/目录下面,www.b.com 会去调用www.a.com/assets/main.swf文件,调用后主文件载入成功,但是在main.swf载入moduleA.swf时报错,错误的内容是
引用内容 引用内容
RSL framework_3.2.0.3958.swf failed to load. Flex Error #1001: Digest mismatch with RSL framework_3.2.0.3958.swf. Redeploy the matching RSL or relink your application with the matching library.

于是我从网上搜索了一下这个错误信息,并找到了相应的解决方法,然后重新编译部署,发现问题还是没有解决。

折腾了好几天无果,偶然我通过firebug观察发现在main.swf载入moduleA.swf的时候,moduleA.swf居然去调用www.b.com/framework_3.2.0.3958.swf文件,不对啊,应该调用www.a.com/assets/framework_3.2.0.3958.swf才对啊,怎么回事情?我完全想不明白,main.swf能正确地去下载www.a.com/assets/framework_3.2.0.3958.swf,为什么moduleA.swf就不能,他们都是使用的相对地址。想不明白归想不明白,但是总算找到了解决方法了,怎么弄呢?很简单,
1,在你的工程文件名称右击鼠标,打开“属性”面板...,算了不写了,麻烦,看下面的图吧









看完了明白了吧,就是说框架rsl部署路径使用绝对路径而不要使用相对路径,这样moduleA.swf就会去www.a.com/assets/framework_3.2.0.3958.swf下载。

经过一段时间的研究我终于明白了原因:
Flash Player 9.0.115 或者以上版本都支持框架运行时共享库,但是他们并不是100%都能成功下载swz文件,flash player 没有成功下载到framework_3.2.0.3958.swz文件后会去下载替代文件framework_3.2.0.3958.swf。main.swf解析相对路径framework_3.2.0.3958.swf就会找到www.a.com/assets/framework_3.2.0.3958.swf并成功下载。main.swf下载moduleA.swf文件使用的是一种“导入装载(Import Loading)”的方式

这种方式的核心代码如下:
程序代码 程序代码

var loaderContext:LoaderContext = new LoaderContext( );
loaderContext.securityDomain = SecurityDomain.currentDomain;
loader.load(new URLRequest("http://site-a.com/child.swf"), loaderContext);

我看了下flex 3源代码发现 module和编译的css文件都是使用的这种方式。
关于 导入装载(Import Loading)想了解更多可以查看 flash 帮助里面关于 flash.system.LoaderContext 类securityDomain属性的解释。

我的了解:通过这种方式载入的资源会认为自己的域和包裹 主flash文件 的html文件的域相同,所以moduleA.swf解析相对路径framework_3.2.0.3958.swf就会找到www.b.com/framework_3.2.0.3958.swf。


此文禁止转载,但是您可以以超级链接的方式链接到这篇文章。


[本日志由 Admin 于 2009-07-28 07:39 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
评论: 1 | 引用: 0 | 查看次数: 2015
回复回复Feitian[2009-10-07 12:34 AM | del]
Walter She?
Are you a dev of augmentum beijing?
I'm Calvin Gan, do you remember me? last year, I worked with you on CCTV OnlinTV project.
What a supprise while I search some flash documents on google, I landed your website, hahaha.

引用来自 Admin Admin 于 2009-10-10 02:27 PM 回复
Hi Calvin, i'm walter ,What's up?
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭