Flex 本地安全策略问题
今天在做项目的时候遇到了一个问题,访问xml文件就是成功不了。看了看以前写过的代码都可以,而这个项目中为什么就不行了呢?仔细查看了目录,是百思不得其解啊。
错误信息:*** Security Sandbox Violation ***
Connection to file:///C|/loading.swf halted - not permitted from xxxx/data.xml。这个xml是在工程里面src目录下的。这个信息是在控制台中输出的。
于是我监听了Fault事件,事件描述大概如下:
Only local-with-filesystem and trusted local SWF files may access local resources.
于是使劲儿的Google,很多人都说用crossdomain.xml来解决。可根本没用,因为的xml文件是在本地的,且在工程的src目录下面。这时想起来在Compiler里可以添加参数(貌似可以解决),可是又忘了参数如何写,最后终于在国外的一个网站看到有人用了这个办法,并且推荐用这种方法。一试,果然好用!
方法:工程属性-Flex Compiler-
在输入框中输入 -use-network=false
注意,要与前面的参数之间留一个空格。
问题解决了。
(就在刚才我把 -use-network=false去掉了,但是程序依然正常运行了,诡异!其实本来不添加 -use-network=false也该正常的,可之前无论怎么样都不行。怀疑可能在那个时间段系统的安全策略有变化,我只能这么想了。)
不过这个方法还是很有用的,因为它在那个时间段解决了问题,缓解了调试的时间。
相关文档:
<?xml version="1.0" encoding="utf-8"?>
<!-- Simple example to demonstrate the DateTimeAxis class. -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
import mx.collections.ArrayCollection;
......
组件重叠显示,使用属性includeInLayout的true或false
在Flex中,将includeInLayout设置为false,并不代表从“布局”中“隐藏”掉这个UIComponent,而仅仅是将这个UIComponent从布局中忽略,直接布局下一个对象。如果想完全从容器中隐藏掉一个对象,请同时使用visible=”false” includeInL ......
一个数据模型就是一个ActionScript对象,这个对象的属性用来存储应用程序之地你的数据。在向服务器发送数据之前,或者从服务器接收数据但还没有使用之前,数据模型提供一个在Flex应用程序中存储数据的途径。Adobe Flex应用程序与服务器之间的通信只发生在Flex应用程序需要检索的数据尚未可用,和使用Flex应用程序中的新数据 ......
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal">
<mx:Panel width="382" height="277" layout="absolute">
......