简介
当在 Web 浏览器中载入 SWF 文件时,HTML <OBJECT> 标记的 FlashVars 参数会将变量发送到 SWF 文件的最高级别。<OBJECT> 标记用于将 SWF 文件添加到 HTML 页面中。也可以使用 <EMBED> 标记,但是它较旧,现在已过时。
有关使用 <OBJECT> 标记的基本内容的信息,请参阅 OBJECT 标记语法。
注意:FlashVars 功能需要 Flash Player 6 或更高版本。
使用 FlashVars 将值传递到 SWF 文件
您可以使用名为“FlashVars”的可选参数将变量传递到 SWF 文件的根级别。将此参数置于 <OBJECT> 标记或较旧的 <EMBED> 标记内。随后,在播放文件的第一帧之前,所有这些变量都会传递到 SWF 文件。
您可以根据需要使用任意变量名称传递任意多个变量。所有浏览器都支持长度不超过 64 KB(65535 字节)的 FlashVars 字符串。
FlashVars 属性的格式是由以 '&' 字符分隔的一组“名称=值”对组成的字符串。
您可以使用 '%' 字符后跟相应的两位十六进制值来包括特殊字符或不可打印字符。单个空格可以使用 '+' 符号来表示。有关 URL 编码特殊字符的更多信息,请参阅 URL 编码 (Wikipedia)。
以下 HTML 代码示例传递了两个变量。第一个名为“myVariable”,值为“Hello World”。第二个名为“mySecondVariable”,值为“Goodbye”。
OBJECT 标记示例
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="400" id="myFlashMovie" align="middle"> <param name="movie" value="myFlashMovie.swf" /> <param name=FlashVars value="myVariable=Hello%20World&mySecondVariable=Goodbye" /> <!--[if !IE]>--> <object type="application/x-shockwave-flash" data="myFlashMovie.swf" width="550" height="400"> <param name="movie" value="myFlashMovie.swf" /> <param name=FlashVars value="myVariable=Hello%20World&mySecondVariable=Goodbye" /> <!--<![endif]--> <a href="http://www.adobe.com/go/getflash"> <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /> </a> <!--[if !IE]>--> </object> <!--<![endif]--> </object>
EMBED 标记示例
也可以使用 <EMBED> 标记来将 SWF 文件添加到 Web 页面中,但它是一个较旧的标记,现在已过时。
<embed src="myFlashMovie.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="myFlashMovie" FlashVars="myVariable=Hello%20World&mySecondVariable=Goodbye" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflash" />
浏览器对 FlashVars 字符串编码的方式与对 HTML 页面上其余内容编码的方式相同。Windows 上的 Internet Explorer 提供符合 UTF-16 规范的编码。其他浏览器提供符合 UTF-8 规范的编码。
在 SWF 文件中的 ActionScript 3.0 代码中访问变量
将变量从 HTML 传递到 SWF 文件之后,SWF 文件要求使用这些变量。
使用 ActionScript 3.0 LoaderInfo 对象访问 FlashVars 变量。
简单示例
以下代码示例查询 LoaderInfo 对象以访问在 FlashVars 参数中传递到 SWF 文件的名为“myVariable”的变量。然后,它将 Stage 上一个文本字段的文本设置为该变量的字符串值。
// by querying the LoaderInfo object, set the value of paramObj to the // to the value of the variable named myVariable passed from FlashVArs in the HTML var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters.myVariable; // set the text of the text instance named text1. Use the toString() method // to convert the value from an object to a string so it can be used in the text field text1.text = paramObj.toString()
您可以下载展示以上代码实际应用的 FLA、SWF 文件和 HTML 文件。
高级示例
下面的代码示例可以执行以下操作:
- 在 Stage 上创建 TextField 实例(名为 tf)。
- 使用 LoaderInfo 对象从 FlashVars 参数中提取变量。
- 使用 for..in 循环对传递的各个变量进行迭代。
- 在文本字段中显示变量名称和值。
// AS3 var tf:TextField = new TextField(); // create a TextField names tf tf.autoSize = TextFieldAutoSize.LEFT; tf.border = true; addChild(tf); // add the TextField to the DisplayList so that it appears on the Stage tf.appendText("params:" + "\n"); try { var keyStr:String; var valueStr:String; var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters; //set the paramObj variable to the parameters property of the LoaderInfo object for (keyStr in paramObj) { valueStr = String(paramObj[keyStr]); tf.appendText("\t" + keyStr + ":\t" + valueStr + "\n"); // add each variable name and value to the TextField named tf } } catch (error:Error) { tf.appendText(error.toString()); }
在 SWF 文件中的 ActionScript 2.0 代码中访问变量
在 ActionScript 2.0 中,您可以直接访问 FlashVars 变量,就像已在 SWF 文件本身中声明它们一样。
以下示例将名为 text1 的动态文本实例的文本属性设置为名为 myVariable 的变量的值。myVariable 在 FlashVars 参数中声明。
// AS2 text1.text = myVariable;
您可以下载展示以上 AS2 代码实际应用的 FLA、SWF 文件和 HTML 文件。
其他技巧
也可以通过将变量附加到在 OBJECT 和 EMBED 标记中指定的 SWF 文件的 URL 来将变量传递到 SWF 文件。在此技巧中,附加到 URL 的附加信息称为查询字符串。如果您在载入 SWF 文件时立即需要变量,这种方法存在限制。当您使用这种方法时,有必要先下载并播放 SWF 文件,然后才能从服务器请求大量数据。
- 有关查询字符串技巧的示例,请参阅将 FlashVars 与 ActionScript 3.0 一起使用(Adobe 博客)。
- 有关可与 OBJECT 标记一起使用的其他属性的信息,请参阅 Flash OBJECT 和 EMBED 标记属性。
关键字:传递; 参数; 查询字符串; object; embed; tn_16417