沙箱示例

本文意在说明产生沙箱的原因和解决办法

swf代码如下:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
			    creationComplete="init()"	layout="absolute" minWidth="955" minHeight="600">
	<mx:Script>
		<![CDATA[
			public function init():void
			{
				var ldr:Loader = new Loader();
				var url:String = "http://192.168.0.50:81/TestRSL/others.jpg";
				var urlReq:URLRequest = new URLRequest(url);
				ldr.load(urlReq);
//				addChild(ldr);
				ldr.contentLoaderInfo.addEventListener(Event.COMPLETE,loaderHander);
			}
			internal function loaderHander(evt:Event):void{
				imgDiv.source=evt.currentTarget.content;
				//imgDiv.source=_loader.content;
				
			}
		]]>
	</mx:Script>
	<mx:Image x="58" y="6" width="397" height="296" id="imgDiv" autoLoad="true"/>
</mx:Application>
简要说明一下,通过Loader和URLRequest获取图片赋值Image。

首先在Flash Builder下调试,此时Security.sandboxType为localTrusted,此时是不会出现安全沙箱冲突的。

然后把debug下文件全部拷贝本机(192.168.0.187)的IIS下,此时Security.sandboxType为remote,出现安全沙箱冲突。(192.168.0.50的IIS下没有crossdomain.xml)

如果通过策略文件方式来解决,需要先修改代码:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
			    creationComplete="init()"	layout="absolute" minWidth="955" minHeight="600">
	<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
			public function init():void
			{
				var lc:LoaderContext = new LoaderContext(true);
				var ldr:Loader = new Loader();
				var url:String = "http://192.168.0.50:81/TestRSL/others.jpg";
				var urlReq:URLRequest = new URLRequest(url);
				ldr.load(urlReq,lc);
				ldr.contentLoaderInfo.addEventListener(Event.COMPLETE,loaderHander);
			}
			internal function loaderHander(evt:Event):void{
				imgDiv.source=evt.currentTarget.content;
				Alert.show("You just changed views."+Security.sandboxType);

				//imgDiv.source=_loader.content;
				
			}
		]]>
	</mx:Script>
	<mx:Image x="58" y="6" width="397" height="296" id="imgDiv" autoLoad="true"/>
</mx:Application>

主要是load方法添加一个参数,具体文档说明为:

context:LoaderContext (default = null) — LoaderContext 对象,它具有定义下列内容的属性:

  • 是否应在加载对象时检查策略文件是否存在
  • 被加载的对象的 ApplicationDomain
  • 加载的对象的 SecurityDomain
  • 加载的图像对象的 ImageDecodingPolicy

如果未指定 context 参数或者该参数引用了 null 对象,则已加载的内容将保留在自己的安全域中,所以仅仅添加策略文件时不够的

解决方法1:默认策略文件,就是添加crossdomain.xml到192.168.0.50的IIS跟目录下。

解决方法2:代码中加载策略文件,因为默认策略文件给服务器维护造成影响,可以放到子域中,用Security.loadPolicyFile(),但是这种在flash player10就不行了,必须要先在主策略文件设置,然后才可以



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值