flash与js交互

当Flash置于HTML容器中时,经常会遇到Flash与JS的通信问题,例如:JS能否调用Flash中的变量、方法,Flash能否调用JS中的变量、方法等等。答案是肯定的。随着技术的不断发展,解决方案也是多种多样的。

比如存在js端方法:
  function JsFun(){
    alert(123);
  }

一、Flash调用js端方法:
1)方法一、getURL调用JS:  
  getURL("javascript:JsFun()");
  //带参数的JS方法:getURL("javascript:JsFun('a',1,true)");

2)方法二、ExternalInterface调用JS: 
  import flash.external.ExternalInterface;//导入 ExternalInterface 类   
  ExternalInterface.call("JsFun"); 
  //带参数的JS方法:ExternalInterface.call("JsFun",'a',1,true);
注意:如果要使用 ExternalInterface,当前帧必需要有 import flash.external.ExternalInterface; 或者 import flash.external.*;

二、js调用Flash方法:
1)方法一、
Flash端代码:
  import flash.external.*; //导入包
  ExternalInterface.addCallback("FlashFun",this,FlashFun); //将函数注册到容器列表
  function FlashFun(str:String){ //Flash内部函数
    lbl_Name.text = str; //lbl_Name是Flash端的文本标签
  }

js端代码:
  function GetFlashObj(flashName){ //根据flash的name获取flash对象,也可以根据flash的id来获取document.getElementById(flashId);
    if(navigator.appName.indexOf('Microsoft')!=-1){
      return window[flashName];
    }else{
      return document[flashName];
    }
  }
  GetFlashObj('demo').FlashFun('Hello World!');

2)方法二、
js端给Flash端的变量赋值,在Flash端侦听变量的变化:
js端代码:
  GetFlashObj('demo').SetVariable('status',1); //SetVariable(变量名,变量值);

Flash端代码:
  var status=0;//变量名
  setInterval(function(){
    if(status==1)
      FlashFun();

  },1000);
  function FlashFun(){
    //
  }

原文地址:https://www.cnblogs.com/wxt2005/p/3179427.html