SWF与SWF交互

SWF与SWF交互
2010年07月23日
  在AS2里SWF与SWF交互是非常容易的,可在AS3里一切都似乎复杂化了。
  主SWF访问子SWF:
  比如有两个SWF。main.swf 、game.swf,main.swf加载game.swf。main 里有个按钮 _btn,game.swf里有一个gameMc:MovieClip 。
  当按m1时,gameMc暂停播放。
  在AS2里可以方便的写:
  var mc=this.createEmptyMovieClip("mc",10)
  var loader:MovieClipLoader=new MovieClipLoader()
  loader.loadClip("game.swf",mc)
  loader.addListener(loadListener)
  var loadListener=new Object()
  loadListener.onLoadInit = function(target_mc:MovieClip) {
  _btn.onRelease=function(){
  target_mc. gameMc.stop()
  }
  }
  可是如果在AS3里直接这样操作的话是会出错的,有2个新地方要注意:
  ApplicationDomain、LoaderContext、
  在main.as:
  package {
  import flash.display.MovieClip;
  import flash.events.*;
  import flash.display.Loader;
  import flash.net.URLRequest;
  import flash.events.ProgressEvent;
  [b] import flash.system.ApplicationDomain
  import flash.system.LoaderContext [/b]
  import flash.display.SimpleButton
  public class main extends MovieClip {
  var _loader:Loader;
  var _swfArray:Array;
  var _urlRequest:URLRequest;
  public function main() {
  _swfArray=["game.swf","link.swf","news.swf"];
  _loader=new Loader();
  _btn.addEventListener(MouseEvent.CLICK,cm1);
  [b] var loadContxt= new LoaderContext(false,ApplicationDomain.currentDomain) [/b]
  /*这个在更复杂的例子中会遇到,比如
  RuntimeAssetsExplorer。www.adobe.com/go/learn_programmingAS3samples_flash_cn
  */
  _loader.contentLoaderInfo.addEventListener(Event.INIT,loaded);
  _loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,loading);
  _loader.load(new URLRequest(_swfArray[n]),loadContxt);
  }
  function loaded(e=null) {
  trace("加载完成...");
  var mc:*=e.target.content;
  //mc.name="mc";
  addChild(mc);
  }
  function cm1(e=null) {
  var mc:*=_loader.content
  mc.gameMc.stop()
  }
  }
  }
  子SWF访问主SWF:
  当按了下game.swf里的gameMc:MovieClip,让main.swf的按钮_btn为不可见
  game.as
  package {
  import flash.display.MovieClip;
  import flash.events.*;
  public class game extends MovieClip {
  public var gameMcs;
  public function game() {
  //gameMc.stop()
  gameMcs="hrrrrrrh";
  trace("kkk");
  gameMc.buttonMode=true;
  gameMc.useHandCursor=true;
  gameMc.addEventListener(MouseEvent.CLICK,setAlpha);
  }
  public function Test() {
  return ("s");
  }
  public function setAlpha(e=null) {
  e.target.play();
  [b]this.parent[’_btn’].visible=false; [/b]
  }
  }
  }
  最后,翻阅AS3帮助可以知道:
  LoaderContext(checkPolicyFile:Boolean = false, applicationDomain:ApplicationDomain = null, securityDomain:SecurityDomain = null)
  checkPolicyFile 属性
  :指定 Flash Player 是否应在开始加载对象本身之前,尝试从所加载对象的服务器上下载跨域策略文件。 此标志适用于 Loader.load() 方法,但不适用于 Loader.loadBytes() 方法。
  如果是使用 Loader.load() 方法下载 SWF 文件,也尽量不要将 checkPolicyFile 设置为 true。 这是因为 SWF 到 SWF 的权限不是由策略文件控制的,而是由 Security.allowDomain() 方法控制的,因此在加载 SWF 文件时 checkPolicyFile 不起任何作用。 在这种情况下不必再检查是否存在策略文件,因为这样会延迟 SWF 文件的下载,并且可能会不必要地占用网络带宽 (Flash Player 无法判断您的主下载将是 SWF 文件还是图像,这是因为策略文件下载先于主下载进行)。
  applicationDomain 属性
  (这里比较重要一点):
  指定用于 Loader.load() 或 Loader.loadBytes() 方法的应用程序域。 只应在加载使用 ActionScript 3.0 编写的 SWF 文件(不是图像或使用 ActionScript 1.0 或 ActionScript 2.0 编写的 SWF 文件)时才使用此属性。
  每个安全域被分成一个或多个由 ApplicationDomain 对象表示的应用程序域。 应用程序域并不是用于安全目的;它们用于管理 ActionScript 代码的协作单元。 如果是从其它域加载 SWF 文件,并允许将它放置到另外一个安全域中,则您将无法控制所加载的 SWF 文件被放置到哪个应用程序域中;即使您指定应选择某个应用程序域,也会忽略。 但是,如果是将 SWF 文件加载到您自己的安全域中(因为此 SWF 文件来自您自己的域,或者您正在将它导入到您的安全域中),您就可以控制为所加载的 SWF 文件选择哪个应用程序域。
  在 LoaderContext.applicationDomain 中,您只可以传递您自己的安全域中的应用程序域。 如果试图传递任何其它安全域中的应用程序域,则会引发 SecurityError 异常。
  securityDomain 属性
  :指定用于 Loader.load() 操作的安全域。 只应在加载 SWF 文件(而不是图像)时使用此属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值