代码改变世界

SwfObject解决Html与Flash之间传递参数问题

2008-10-28 16:08  宝宝合凤凰  阅读(2966)  评论(0)    收藏  举报

SwfObject解决Html与Flash之间传递参数问题

彻底摒弃Adobe的激活ActiveX控件的方法一文中已经详细分析了使用Adobe提供的AC_RunActiveContent.js导致HTML与Flash之间不能传递参数的问题。经过Adobe论坛里GWD的提示,我转而寻求SwfObject的帮助。发现SwfObject是一个很好的解决方案。

SwfObject英文介绍:http://blog.deconcept.com/swfobject/
SwfObject中文翻译:http://www.awflasher.com/flash/articles/swfobj.htm
源文件:SWFObject 1.5

关于SwfObject的介绍上面两篇文章已经讲的很详细了。我这里只列一段标准的应用和一些上面两篇文章没有提到的问题.

Html中的JS代码
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">
  // <![CDATA[
  var so = new SWFObject("asCallJs.swf", "MyDemo", "500", "400", "9", "#FF6600");
  so.addVariable("param1", "Parameter1"); // this line is optional, but this example uses the variable and displays this text inside the flash movie
  so.addVariable("param2", "Parameter2");
  so.useExpressInstall('expressinstall.swf');
  so.write("flashcontent");
  // ]]>
</script>
<!--被AS调用的JS函数-->
<script language="Javascript">
 // <![CDATA[
  // adds two numbers, and sends the result back to ActionScript
  function addNumbers(num1, num2)
  {
  result=num1 + num2;
  alert("3+7=" + result);
  return (result);
  }
 // ]]>
</script>

Flash中的AS代码
//****************调用JS函数,得到返回值*****************
var n1:uint = 3;
var n2:uint = 7;
if (ExternalInterface.available) {
 var res:uint = ExternalInterface.call(”addNumbers”, n1, n2);
 function_txt.text=”3+7=”+res.toString();
}
//****************直接得到JS中参数****************
//AS2中做法
//param1_txt.text=param1;
//AS3中做法
param1_txt.text=this.loaderInfo.parameters.param1;
param2_txt.text=this.loaderInfo.parameters.param2;

注:如果要在AS3中用OOP来操作的话,需要专门构建一个类,用它其中的静态变量来存储全局变量,要使用这些变量的类先继承它(Storing SWFObject.addVariable() vars globally in AS3)。

8 Responses to “SwfObject解决Html与Flash之间传递参数问题”

  1. admin Says:

    <!– 引用swfobject.js –>
    <script type="text/javascript" src="swfobject.js"></script>
    <script type="text/javascript"> // <![CDATA[ //注意"MyDemo"不能带有空格,否则函数无法调用 var so = new SWFObject("asCallJs.swf", "MyDemo", "500", "400", "9", "#FF6600"); so.addVariable("param1", "Parameter1"); // this line is optional, but this example uses the variable and displays this text inside the flash movie so.addVariable("param2", "Parameter2"); so.useExpressInstall(\\\'expressinstall.swf\\\'); so.write("flashcontent"); // ]]></script>
    <!–被AS调用的JS函数–>
    //注意不要写成
    <script type="text/javascript"> // <![CDATA[ // adds two numbers, and sends the result back to ActionScript function addNumbers(num1, num2) { result=num1 + num2; alert("3+7=" + result); return (result); } // ]]></script>

  2. 彻底摒弃Adobe的激活ActiveX控件的方 | 无雨之城 Says:

    [...] 替代方案:SwfObject 请参考SwfObject解决Html与Flash之间传递参数问题 [...]

  3. Flash Earth-Flash版的Google Maps | 无雨之城 Says:

    [...] 如文章标题所示,Flash Earth是通过Flash调用Google Maps的数据,并控制地图浏览的一个小程序,它又以下几个文件组成: 1 index.html - 包含Flash的入口页面。其中插入Flash使用的是SwfObject。关于SwfObject的使用请参参考SwfObject解决Html与Flash之间传递参数问题。 2 swfobject.js - SwfObject的源文件,只有在index.html中引用它才可以使用Swf Object来插入Flash,类似于AC_RunActiveContent.js。 3 flash_earth.swf - 主程序,实现对Google Maps数据的调用。 4 main.css - 格式文件,用于控制index.html中格式。 [...]

  4. SwfObject无法替代table | 无雨之城 Says:

    [...] 在SwfObject解决Html与Flash之间传递参数问题一文中已经介绍了SwfObject的用法,但今天发现so.write(”flashcontent”);中如果”flashcontent”为table的id,那么在IE中无法加载Flash.这个问题很好解决,只要建一个一行一列的table,把id加到单元格上就不会出问题了。 [...]

  5. 创世纪 Says:

    写的非常好,谢谢啦~

  6. admin Says:

    谢谢!

  7. Phentermine Says:

    phentermine…

    Halla everybody! I want pharmacist this tbl. Need phentermine amdbl…

  8. SwfObject解决JavaScript与Flash之间传递参数问题-2 | 无雨之城 Says:

    [...] 在SwfObject解决Html与Flash之间传递参数问题中已经简要介绍了如何使用SwfObject在页面中插入Flash,如何在初始时由JS向Flash传递参数,以及运行时Flash如何调用JavaScript中函数。这里主要介绍运行时JavaScript如何互相传递参数, 并控制Flash的播放。 [...]