框架运行时共享库 module载入失败 一种解决方法
作者:Admin 日期:2009-06-19
该文章 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时报错,错误的内容是
引用内容
于是我从网上搜索了一下这个错误信息,并找到了相应的解决方法,然后重新编译部署,发现问题还是没有解决。
折腾了好几天无果,偶然我通过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。
此文禁止转载,但是您可以以超级链接的方式链接到这篇文章。
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。
此文禁止转载,但是您可以以超级链接的方式链接到这篇文章。
评论: 1 | 引用: 0 | 查看次数: 2015
发表评论
上一篇
下一篇

文章来自:
Tags:
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.