更新Flex 4.1中TextLayout的RSL路径

最新有网友反映我的几个Flex应用运行出错,可在我的电脑上却运行良好。奇怪了?我首先确认不是程序本身的问题,然后对比这些应用,发现它们都是用Flex 4.1发布的,而且都使用了RSL框架链接方式,肯定是部署出了问题。当我清除Flash Player缓存的已签名认证的RSL文件(swz)后,再次运行该应用就重现错误了:Error #2032: 流错误。 URL: http://fpdownload.adobe.com/pub/swz/flex/4.1.0.16076/textLayout_1.1.0.604.swz。

很明显,从Adboe 官网上加载TextLayout的swz文件失败。原来TextLayout现在已经由Adboe的一个独立团队开发,他们已经更新了其共享库部署路径(http://fpdownload.adobe.com/pub/swz/tlf/1.1.0.604/textLayout_1.1.0.604.swz),但Flex SDK 4.1还是用的旧路径(http://fpdownload.adobe.com/pub/swz/flex/4.1.0.16076/textLayout_1.1.0.604.swz),因此出现了加载错误。只是如果你以前运行过使用RSL框架链接方式部署的应用,swz文件能保存在Flash player的缓存中,让你能跨应用、跨域跨浏览器快速访问其它同样使用RSL部署的应用。因此,这个错误对于你来说是很难发现的,除非是其他人第一次访问使用这种部署应用或者你清除Flash Player缓存的swz文件后重新访问。

一个解决方法就是直接在修改flex-config.xml中TextLayout的RSL路径。如下面的配置:

<runtime-shared-library-path>
  <path-element>libs/textLayout.swc</path-element>
  <rsl-url>http://fpdownload.adobe.com/pub/swz/tlf/1.1.0.604/textLayout_1.1.0.604.swz</rsl-url>
  <policy-file-url>http://fpdownload.adobe.com/pub/swz/crossdomain.xml</policy-file-url>
  <rsl-url>http://www.riafan.com/swz/4.1/textLayout.swz</rsl-url>
  <policy-file-url>http://www.riafan.com/crossdomain.xml</policy-file-url>
</runtime-shared-library-path>

我仍然保留了Adboe官方的swz部署路径,万一哪天Adboe回心转意了呢?另外新增了我自己网站的swz部署路径。还是从自己网站上加载靠谱一点。呵呵,我也不能保证我的网站哪天不出问题。反正多一个选择心理踏实些,对不对?

另外一个解决方法就是返回到到Flex 2时代,使用“合并到代码中”的框架链接方式。当然,编译的SWF文件会很大。别看这种方法笨,但你的应用不再受swz部署网站的影响。

所以说RSL是把“双刃剑”,用不好会让自己很受伤。正如我以前写的一篇文章所说,要慎用Flex RSL。Flex 4.8中默认下已经取消了RSL的框架链接方式,就是明证。

发表评论