最近用flex做了个简单的MP3播放器,放在jsp页面测试遇到了一些关于安全沙箱的问题
播放器界面:
jsp工程目录结构如下:
MP3播放器中:加载音乐文件的flex代码如下:
第一个版本(对应jsp工程里的:mp3_2.swf文件):
var Mp3:URLRequest = new URLRequest("http://localhost:8080/test_mp3Player/1.mp3");
第二个版本(对应jsp工程里的:mp3.swf文件):
var Mp3:URLRequest = new URLRequest("G:\\1.mp3");
因为,这个播放器是放在jsp页面上测试的,因此,用了两个版本来测试,播放器中通过”Alert.show("-----fff----"+flash.system.Security.sandboxType);“来打印播放器的安全沙类型,
test_1.jsp页面测试的是:mp3.swf
test_2.jsp页面测试的是:mp3_2.swf
test_2.jsp页面,可以访问到服务器上的资源,这个没问题
但是问题在于,test_1.jsp页面就访问不到本地的资源
我查了下资料,知道这是flex的安全沙问题,于是在我的tomcat的D:webapps\ROOT下面加入了策略文件:crossdomain.xml
内容如下:
[align=center] <?xml version="1.0"?>
<!DOCTYPE cross-domain-policy
SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy> [/align]
还是报错:SecurityError: Error #2148: SWF 文件 http://localhost:8080/test_mp3Player/mp3.swf 不能访问本地资源 file:///G:/1.mp3。只有仅限于文件系统的 SWF 文件和可信的本地 SWF 文件可以访问本地资源。
不知道是哪里错了,希望大家可以帮我解决下,谢谢
[解决办法]
在C:\windows\system32\Macromed\Flash\FlashPlayerTrust 下面(如果没有FlashPlayerTrust目录则需要创建一个),创建一个文本文件,例如dev.txt,把开发时要运行的swf所在目录每个目录一行,写到dev.txt文件中,例如:
E:\flexprojects\fmstest\
E:\flexprojects\VideoPlayer\
这样这些目录中的swf文件在运行时的安全沙箱类型就变成了” Security.LOCAL_TRUSTED”, 可以随意访问本地或者远程的资源了
[解决办法]
Security.allowDomain("*")
Security.loadPolicyFile(项目域名+"/crossdomain.xml");
试试
[解决办法]
用IP进行访问,不要用localhost。
[解决办法]
crossdomain.xml
[解决办法]
个人经历供参考:
1:不要用localhost 要全部改成相应的ip
2: 在你的服务器上的项目根路径下添加crossdomain.xml 文件的内容如下
<?xml version="1.0"?>
<cross-domain-policy>
<!--
这里的domain可以换成你指定的ip,就是客户端得ip
-->
<allow-access-from domain="*" />
</cross-domain-policy>
以上两点希望能帮上你