`
dong_qu
  • 浏览: 6105 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

flash安全沙箱问题

 
阅读更多
解决”安全沙箱冲突”的第一种方法:是通过配置跨域文件来实现的,但因为作者未写明细节,所以看不出配置文件所在的域是A还是B。

刚才 load 一张网络上的图片,发现不能用 setMask 对其遮罩,trace 出现“安全沙箱冲突”。知道原因就好办了,调用不同域的对象或变量需要 allowDomain,如下:

System.security.allowDomain("www.zhugao.cn");
loadMovie("http://www.zhugao.cn/images/links/links_zhugao.jpg", my_mc);

注意,“www.zhugao.cn”和“zhugao.cn”不是相同域,根据目标而定。例如 loadMovie("http://player.zhugao.cn/***.jpg", my_mc); 那么 allowDomain 的应该是 player.zhugao.cn,而不是 zhugao.cn,也不是 www.zhugao.cn

如果要允许多个域,可以用逗号隔开:
System.security.allowDomain("www.zhugao.cn", "zhugao.cn", "player.zhugao.cn");

播放器在 8.0 以上可以使用通配符 “*” 来允许所有域:
System.security.allowDomain("*"); 


解决:”FLASH3.0安全沙箱” 问题的方法二:
利用JS脚本绕过安全沙箱(有待验证,如果可以也不失为一种体面的解决办法!)

Flash作为一种客户端的前台脚本技术,本来是不应该赋予更强大的功能的。

但是随着Flash技术的发展,目前已然能够读xml文件,载入多媒体内容,

甚至直接与服务器端进行Socket通信。

当然,这些还不够,Flash与js,Flash与Flash之间也已然实现了交互通信。

这样导致的结果就是带来了大量令人头疼的安全问题。

于是Flash在它的AS3.0里提出了安全沙箱这一概念。

在未经授权的情况下,Flash默认状态是不允许进行跨域通信的,这样就使得Flash的安全可靠性得到了提高。

可同时也带来了意想不到的麻烦:我制作了一个Flash,在页面中用js脚本控制as脚本,然后使用FlashCS3的发布功能发布了该Flash,

上传到网站上后,问题出现了,此时Flash无论执行任何访问外界的as脚本均会提示安全沙箱问题!

即使是打开链接地址也会出现警告!

解决的办法很简单,连我自己后来都觉得很诧异:将调用Flash的参数:allowScriptAccess的值改为always即可。

例如:<param name="allowScriptAccess" value="always" />

用js来控制Flash的安全访问?是不是有点自欺欺人?

解决”安全沙箱冲突”的方法三:使用Asp.Net绕过As3的跨域安全沙箱
完全的文件转发,以极低的效率来解决了问题,基本无实用价值.作者有大段的代码就没有全部复制,请根据上面引用详细阅读。
As3的SandBox这点上有点让人感觉非常郁闷。

如果要取不同域上的文件(比如歌曲,图片等),当对方服务器没有crossdomain.xml的时候就会出现安全沙箱错误。

这点有点郁闷。

中午午饭后,想到这个问题,于是用Asp.Net写了个Web Proxy。通过Asp.Net进行资源的转发,解决了跨域的安全沙箱问题。

不过这个东东会加大服务器的带宽和计算压力~

解决”安全沙箱”的方法四:一种猥琐的图片跨域的方法似乎是利用了Flex本身的疏漏来达到特定访问图片的方法,但由于作者代码的不完全,作为初学的我还无法完全理解他的思路,还请大家指教这个。

今天看到达达(ASFlex)的博文,关于跨域的问题,突然想起来我之前[原]淘宝店家起义篇。。。要做的实验之一,遂趁当前下班时间,在公司里写了一段测试代码。

果然是无法Draw的,在帮助文档已经明确的写了......................................

如何突破呢? 还是以后直接拿TextField来用?

以此标记,下回,改用AVM1+AVM2混合内容测试

目前方法是猥琐的抽出Loader来用

测试连接:
www.xintend.com/temp/icd/index.html

有兴趣的同学可以去玩下~~ 图片可以拖动~~~~~~~

核心 代码部分:


01. function handleLoadBtn():void { 
02.            var s:String = urlInput.text; 
03.            var ht:String = "<img src='"; 
04.            if (s.length > 0) { 
05.                ht += s;                                 
06.                ht += "' "; 
07.                ht += "id='image'>"; 
08.                tf.htmlText = ht; 
09.                output.text = ht; 
10.                output.text += "\n";                 
11.                output.text += tf.getImageReference("image"); 
12.                var c:DisplayObject = tf.getImageReference("image");  1
3.                ui.addChild(c); 
14.                output.text += "\n ui.addChild(c);"; 
15.            } 
16.        }


解决本地的安全沙箱,我本地测试的时候倒没遇到过!
经常在本机调试flash的时候,会报安全沙箱问题,除了去adobe的网站(www.macromedia.com/suppor ... ings_manager04.html)上添加本机的目录外,还可以有一种更简单的办法,

在C:\windows\system32\Macromed\Flash\FlashPlayerTrust 下面,添加一个txt文件,例如songhuan .txt,然后在里面添加你的本机的目录,例如f:\songhuan\ 或者c:\都可以。以后在哪里报错了,就在这个文件里添加路径就可以了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics