简介

当在 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 文件,然后才能从服务器请求大量数据。

关键字:传递; 参数; 查询字符串; object; embed; tn_16417

本产品经 Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License 许可  Twitter™ 与 Facebook 中的内容不在 Creative Commons 的条款约束之下。

法律声明   |   在线隐私策略