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

来源:互联网 发布:mac 读取exe 编辑:程序博客网 时间:2024/04/30 15:55

需求: 

开发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。不同的浏览器不同的处理方法。

 

原创粉丝点击