关于跳过flex的sandbox实现访问本地资源的解决方案

需求: 

开发flex的过程中遇到一个问题。flex的项目需要在客服端显示一个局域网类的一台服务器的文件目录结构,并且要能够点击访问。

 

预想:

flex在以前的版本里面没有file类,这个可以用java代码在后台进行处理,生成xml文件。前台的flex到相应目录下面读取数据即可。

 

困难:

flash被下载到客服端,有严格的安全限制。如果flash能控制你的系统,那这个计算机世界太恐怖了。

flash的sandbox的内容很多,可以到网上去搜搜看。

现在问题是在客服端,点击访问本地资源的链接时,弹出flash错误:不能访问本地资源,只有信任的程序才能访问本地资源

 

解决方案:

这个问题很怪,在IE上面是能点击开来的,IE会用本地的打开方式来打开相应的文件,略过不提。

还要flex没有把路都堵死了,flex可以调用javascript代码(flash.external.ExternalInterface)。

 

在firefox里面有个插件叫做Noscript,可以允许js代码访问本地资源。还有一个插件叫locallink可以使用file://

而在chrome里面现在暂时还没有这样的功能,但是chrome有个插件叫IE tab。

 

所以下面就是我的解决方案:

IE: window.open("file://*");

firefox:安装Noscript,配置信任“your site”,"file://",同样是window.open("file://*");

chrome:待续

相关代码如下:

flex URLUtil:

import flash.external.ExternalInterface;

 

public class URLUtil    {

 

protected static const WINDOW_OPEN_FUNCTION : String = "window.open";

 

public static function openWindow(url : String, window : String = "_blank", features : String = "") : void {

var str:String= dealUrl(url);

ExternalInterface.call(WINDOW_OPEN_FUNCTION, "file:///"+str, window, features);

}

private static function dealUrl(str:String):String{

var string:String=str.substr(2);

var array:Array=string.split("//");

var url:String="//";

for(var i:int=0;i<array.length;i++){

if(array[i] == ""){

url=url+array[i];

}else{

url=url+array[i]+"/";}

}

return url;

}

}

 

 

还有一个js 方法不要忘记了

获得user.agent。不同的浏览器不同的处理方法。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值