当前位置:首页 > 前端开发 > 正文

swf 如何获取html传递进来的参数

SWF通过HTML的FlashVars或URL参数接收数据,使用Parameters类或getQueryParam()提取参数值

SWF(Flash应用程序)中获取HTML传递的参数,通常需要结合HTML、JavaScript和ActionScript的协作,以下是详细实现方法和注意事项:


参数传递的核心原理

SWF文件本身无法直接解析HTML中的参数,需通过以下流程实现:

  1. HTML层:通过<param>标签、flashvars属性或JavaScript动态传递参数。
  2. JavaScript桥接:使用ExternalInterface或SetVariable将参数从HTML/JS传递到ActionScript。
  3. ActionScript接收:在SWF内部通过事件或API捕获参数。


具体实现方法

方法1:通过 flashvars 传递参数(推荐)

适用场景:静态参数传递,如用户ID、配置项等。

实现步骤

  1. HTML中定义SWF标签

    <object id="mySwf" width="800" height="600" data="mySwf.swf"> <param name="movie" value="mySwf.swf" /> <param name="flashvars" value="uid=123&uname=JohnDoe" /> </object>

    或使用embed

    <embed src="mySwf.swf" flashvars="uid=123&uname=JohnDoe" />
  2. ActionScript接收参数

    // 在SWF的主类中 private var params:Object = Root.params; trace("uid: " + params.uid); // 输出:uid: 123 trace("uname: " + params.uname); // 输出:uname: JohnDoe

优势:简单直接,参数在SWF加载时自动解析。

限制:仅支持字符串类型,需手动解析复杂参数(如JSON)。


方法2:通过 JavaScript 的 SetVariable 方法

适用场景:动态参数传递,或需要在SWF加载后修改参数。

实现步骤

swf 如何获取html传递进来的参数 第1张

  1. HTML中嵌入SWF

    <div id="flashContent"> <script type="text/javascript"> var swf = document.getElementById("mySwf"); swf.SetVariable("_root.info_str", "Hello from HTML"); </script> </div>
  2. ActionScript定义接收变量

    // 在SWF的主时间轴或主类中 var info_str:String; trace(info_str); // 输出:Hello from HTML

优势:可动态更新参数,支持实时交互。

限制:需确保SWF与JavaScript的命名空间一致,且变量名需匹配。


方法3:通过 ExternalInterface 调用JS函数

适用场景:从HTML获取动态数据(如URL参数、用户输入)。

实现步骤

swf 如何获取html传递进来的参数 第2张

  1. HTML中定义参数获取函数

  2. ActionScript调用JS函数

    import flash.external.ExternalInterface; var params:Object = ExternalInterface.call("getUrlParams"); trace("uid: " + params.uid); // 输出URL中的uid参数 trace("uname: " + params.uname); // 输出URL中的uname参数

  3. 优势:灵活处理复杂逻辑,可读取浏览器环境数据。

    限制:需跨域权限配置,且依赖JavaScript函数稳定性。


    参数传递方式对比

    方法 适用场景 优点 缺点
    flashvars 静态参数初始化 简单易用,自动解析 仅支持字符串,需手动处理复杂类型
    SetVariable 动态参数更新 实时交互,可多次调用 需维护变量名一致性
    ExternalInterface 获取动态数据(如URL参数) 灵活性高,可集成复杂逻辑 依赖JS函数,需处理跨域问题


    常见问题与解决方案

    问题1:参数未正确传递到SWF

    • 原因
      • SWF路径或ID错误。
      • flashvars参数格式错误(需为key=value形式,用&分隔)。
      • ActionScript未正确引用参数(如直接调用Root.params而非Root.params.key)。

    • 解决方案
      • 检查HTML标签路径和参数语法。
      • 在ActionScript中添加日志输出,确认参数是否被解析。

    问题2:传递特殊字符或中文参数

    • 原因:URL编码问题导致参数截断。
    • 解决方案
      • 在HTML中对参数进行encodeURIComponent编码: <param name="flashvars" value="msg=你好世界" />
      • 在ActionScript中用decodeURIComponent解码: var msg = decodeURIComponent(params.msg);


    相关问答FAQs

    Q1:如何在SWF中获取HTML中的复选框状态?

    A1

    1. 在HTML中为复选框绑定change事件,并通过SetVariable或ExternalInterface传递状态。 <input type="checkbox" id="myCheckbox" onchange="sendCheckboxState()" /> <script> function sendCheckboxState() { var state = document.getElementById("myCheckbox").checked ? "true" : "false"; mySwf.SetVariable("_root.checkboxState", state); } </script>
    2. 在ActionScript中接收并处理: var checkboxState:Boolean = (_root.checkboxState == "true");

    Q2:如何传递对象或数组参数到SWF?

    A2

    1. 将对象序列化为JSON字符串,通过flashvars或SetVariable传递: <param name="flashvars" value="data={"name":"John","age":30}" />
    2. 在ActionScript中反序列化: import com.adobe.serialization.json.JSON; var data:Object = JSON.parse(params.data); trace(data.name); // 输出:John

    swf 如何获取html传递进来的参数 第3张

0