发布者许可(政策文件):
创建政策文件:
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="domainOrIP" /> <allow-access-from domain="*.example.com" /> <allow-access-from domain="*" /> <allow-access-from domain="localhost" /> </cross-domain-policy>
公布政策文件:
Security.loadPolicyFile("http://domainOrIP/pathToPolicyFile");
取得一个政策文件的许可来装载数据 :
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="www.site-b.com" /> <allow-access-from domain="site-b.com" /> </cross-domain-policy>
var urlloader:URLLoader = new URLLoader(); urlloader.load(new URLRequest("http://site-a.com/assets/file.xml"));
取得一个政策文件的许可来把内容作为数据访问 :
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="www.site-b.com" /> <allow-access-from domain="site-b.com" /> </cross-domain-policy>
var loaderContext = new LoaderContext(); loaderContext.checkPolicyFile = true; theLoader.load(new URLRequest("http://site-a.com/assets/image.jpg", loaderContext)); trace(theLoader.content);
使用一个政策文件来授权套接字连接 :
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="www.site-b.com" to-ports="3000" /> <allow-access-from domain="site-b.com" to-ports="3000" /> </cross-domain-policy>
var socket:Socket = new Socket(); try { socket.connect("site-a.com", 3000); } catch (e:SecurityError) { trace("Connection problem"); trace(e.message); }
1. 端口范围 :
to-ports="9100, 9200"
to-ports="10000-11000"
to-ports="*"
2. 如果一个政策文件时取自小于1024 端口的一个套接字,* 表示对任何端口的访问都被授权
如果一个政策文件取自大于或者等于1024 端口的一个套接字,* 表示对于任何大于或者等于1024端口的访问都被授权
3. 当一个政策文件在和所需的套接字连接的不同端口 提供服务时,必须手工装载那个政策文件 ,添加以下语句:
Security.loadPolicyFile("xmlsocket://domainOrIP:portNumber");
基于HTTP的政策文件:
必须满足的条件:
创建者许可(allowDomian()):
Security.allowDomain("www.sometvnetwork.com", "sometvnetwork.com"); Security.allowDomain("*");
导入装载:swf装载swf
如果两个swf来自不同的远程区域 ,或者不同的安全沙箱类型,使用下面的方法加载
var loaderContext:URLLoader = new URLLoader(); // 仅当加载AS3编写的SWF文件时才会使用此属性 loaderContext.applicationDomain = ApplicationDomain.currentDomain; loaderContext.securityDomain = SecurityDomain.currentDomain; loader.load(new URLRequest("http://site-a.com/assets/file.swf"), loaderContext);
处理安全违规:
要么抛出一个SecurityError 异常,要么调度一个SecurityErrorEvent .SECURITY _ERROR
var urlloader:URLLoader = new URLLoader(); urlloader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorListener); urlloader.load(".../index.xml");
有时需要注册LoaderInfo 的事件监听:
var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorListener);