swf 如何获取html传递进来的参数
- 前端开发
- 2025-07-24
- 6
SWF通过HTML的FlashVars或URL参数接收数据,使用Parameters类或getQueryParam()提取参数值
在SWF(Flash应用程序)中获取HTML传递的参数,通常需要结合HTML、JavaScript和ActionScript的协作,以下是详细实现方法和注意事项:
参数传递的核心原理
SWF文件本身无法直接解析HTML中的参数,需通过以下流程实现:
- HTML层:通过<param>标签、flashvars属性或JavaScript动态传递参数。
- JavaScript桥接:使用ExternalInterface或SetVariable将参数从HTML/JS传递到ActionScript。
- ActionScript接收:在SWF内部通过事件或API捕获参数。
具体实现方法
方法1:通过 flashvars 传递参数(推荐)
适用场景:静态参数传递,如用户ID、配置项等。
实现步骤:
-
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" /> -
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加载后修改参数。
实现步骤:

-
HTML中嵌入SWF:
<div id="flashContent"> <script type="text/javascript"> var swf = document.getElementById("mySwf"); swf.SetVariable("_root.info_str", "Hello from HTML"); </script> </div> -
ActionScript定义接收变量:
// 在SWF的主时间轴或主类中 var info_str:String; trace(info_str); // 输出:Hello from HTML
优势:可动态更新参数,支持实时交互。
限制:需确保SWF与JavaScript的命名空间一致,且变量名需匹配。
方法3:通过 ExternalInterface 调用JS函数
适用场景:从HTML获取动态数据(如URL参数、用户输入)。
实现步骤:

-
HTML中定义参数获取函数:
-
ActionScript调用JS函数:
import flash.external.ExternalInterface; var params:Object = ExternalInterface.call("getUrlParams"); trace("uid: " + params.uid); // 输出URL中的uid参数 trace("uname: " + params.uname); // 输出URL中的uname参数
- 原因:
- SWF路径或ID错误。
- flashvars参数格式错误(需为key=value形式,用&分隔)。
- ActionScript未正确引用参数(如直接调用Root.params而非Root.params.key)。
- 解决方案:
- 检查HTML标签路径和参数语法。
- 在ActionScript中添加日志输出,确认参数是否被解析。
- 原因:URL编码问题导致参数截断。
- 解决方案:
- 在HTML中对参数进行encodeURIComponent编码: <param name="flashvars" value="msg=你好世界" />
- 在ActionScript中用decodeURIComponent解码: var msg = decodeURIComponent(params.msg);
- 在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>
- 在ActionScript中接收并处理: var checkboxState:Boolean = (_root.checkboxState == "true");
- 将对象序列化为JSON字符串,通过flashvars或SetVariable传递: <param name="flashvars" value="data={"name":"John","age":30}" />
- 在ActionScript中反序列化: import com.adobe.serialization.json.JSON; var data:Object = JSON.parse(params.data); trace(data.name); // 输出:John
优势:灵活处理复杂逻辑,可读取浏览器环境数据。
限制:需跨域权限配置,且依赖JavaScript函数稳定性。
参数传递方式对比
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| flashvars | 静态参数初始化 | 简单易用,自动解析 | 仅支持字符串,需手动处理复杂类型 |
| SetVariable | 动态参数更新 | 实时交互,可多次调用 | 需维护变量名一致性 |
| ExternalInterface | 获取动态数据(如URL参数) | 灵活性高,可集成复杂逻辑 | 依赖JS函数,需处理跨域问题 |
常见问题与解决方案
问题1:参数未正确传递到SWF
问题2:传递特殊字符或中文参数
相关问答FAQs
Q1:如何在SWF中获取HTML中的复选框状态?
A1:
Q2:如何传递对象或数组参数到SWF?
A2:
