zoukankan      html  css  js  c++  java
  • 新人补钙系列教程之:体验ApplicationDomain 应用程序域

    要说应用程序域,就不得不说安全沙箱 

    安全沙箱在帮助文档的解释是:

    客户端计算机可以从很多来源(如外部 Web 站点或本地文件系统)中获取单个 SWF 文件。当 SWF 文件及其它资源(例如共享对象、位图、声音、视频和数据文件)加载到 Flash Player 中时,Flash Player 会根据这些文件和资源的来源单独地将其分配到安全沙箱中。

    从导入到安全域的 SWF 文件加载嵌入内容

    当加载 SWF 文件时,可以设置用于加载文件的 Loader 对象的 load() 方法中的 context 参数。此参数是一个 LoaderContext 对象。将此 LoaderContext 对象的 securityDomain 属性设置为 Security.currentDomain 时,Flash Player 将在被加载 SWF 文件所在的服务器上检查是否存在 URL 策略文件。如果存在策略文件,并且该文件向执行加载的 SWF 文件所在的域授予访问权限,则可以作为导入媒体加载 SWF 文件。这样,执行加载的文件可以获得对 SWF 文件的库中对象的访问权限。 

    SWF 文件访问其它安全沙箱中被加载 SWF 文件的类的另一种方法是:使被加载的 SWF 文件调用 Security.allowDomain() 方法,以向执行调用的 SWF 文件所在的域授予访问权限。可以将对 Security.allowDomain() 方法的调用添加到被加载 SWF 文件的主类的构造函数方法中,然后使执行加载的 SWF 文件添加事件侦听器,以便响应由 Loader 对象的 contentLoaderInfo 属性调度的 init 事件。当调度此事件时,被加载的 SWF 文件已经调用构造函数方法中的 Security.allowDomain() 方法,因此被加载 SWF 文件中的类可用于执行加载的 SWF 文件。执行加载的 SWF 文件可以通过调用 Loader.contentLoaderInfo.applicationDomain.getDefinition() 从被加载的 SWF 文件中检索类。

    使用 ApplicationDomain 类

    在使用 Loader 类 API 加载用 ActionScript 3.0 编写的外部 SWF 文件时,可以使用应用程序域。(as2 编写的swf以及图片等不例外)包含在已加载类中的所有 ActionScript 3.0 定义都存储在应用程序域中。加载 SWF 文件时,通过将 LoaderContext 对象的 applicationDomain 参数设置为 ApplicationDomain.currentDomain,可以指定文件包含在 Loader 对象所在的相同应用程序域中。通过将加载的 SWF 文件放在同一个应用程序域中,可以直接访问它的类。如果加载的 SWF 文件包含嵌入的媒体(可通过其关联的类名称访问),或者您要访问加载的 SWF 文件的方法,则这种方式会很有用,如下面的示例所示(来自帮助文档):

    1. package 
    2. { 
    3.     import flash.display.Loader; 
    4.     import flash.display.Sprite; 
    5.     import flash.events.*; 
    6.     import flash.net.URLRequest; 
    7.     import flash.system.ApplicationDomain; 
    8.     import flash.system.LoaderContext; 
    9.     public class ApplicationDomainExample extends Sprite 
    10.     { 
    11.         private var ldr:Loader; 
    12.         public function ApplicationDomainExample() 
    13.         { 
    14.             ldr = new Loader(); 
    15.             var req:URLRequest = new URLRequest("Greeter.swf"); 
    16.             var ldrContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain); 
    17.             ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); 
    18.             ldr.load(req, ldrContext);     
    19.         } 
    20.         private function completeHandler(event:Event):void 
    21.         { 
    22.             ApplicationDomain.currentDomain.getDefinition("Greeter"); 
    23.             var myGreeter:Greeter = Greeter(event.target.content); 
    24.             var message:String = myGreeter.welcome("Tommy"); 
    25.             trace(message); // Hello, Tommy 
    26.         } 
    27.     } 
    28. }
    复制代码
  • 相关阅读:
    SIP语音对讲从零到整之(二)resiprocate编译(Linux,库用于Android)
    Intel Media SDK decode_sample剖析(一)——初始化及解码数据头
    Hadoop-HA集群搭建-rehl7.4
    (1)jmeter录制脚本(使用代理的方式)
    Java自动化环境搭建笔记(3)
    Java自动化环境搭建笔记(1)
    ant安装(Windows)
    jmeter源码环境(IDEA)
    离线安装docker(RedHat7.4)
    PostgreSQL日志分析工具
  • 原文地址:https://www.cnblogs.com/keng333/p/3170233.html
Copyright © 2011-2022 走看看