使用 URL 中的变量

当您在 Flash 中开发应用程序或简单的示例时,可能需要将值从 HTML 页传递到 Flash 文档中。传递的值有时称为查询字符串URL 编码变量。例如,如果要在 Flash 中创建一个菜单,URL 变量是非常有用的。可以将菜单初始化为默认情况下显示正确的导航。或者,可以在 Flash 中构建一个图像查看器并定义要在网站上显示的默认图像。

在文档中使用 URL 变量:

  1. 创建一个 Flash 文档并将它命名为 urlvariables.fla
  2. 选择"文件">"另存为",然后将文档保存到桌面上。
  3. 在时间轴中选择第 1 帧,在"动作"面板中,添加下面的代码:
    this.createTextField("myTxt", 100, 0, 0, 100, 20);
    myTxt.autoSize = "left";
    myTxt.text = _level0.myURL;
    
  4. 选择"控制">"测试影片",在 Flash Player 中对 SWF 文件进行测试。

    文本字段显示 undefined。如果要在继续之前确保正确定义变量,需要检查 Flash 中是否存在变量。可以通过查看它们是否为未定义来实现此目的。

  5. 要检查变量是否已定义,请修改在步骤 3 中添加到"动作"面板中的 ActionScript 使它与下面的代码匹配。添加以粗体显示的代码:
    this.createTextField("myTxt", 100, 0, 0, 100, 20);
    myTxt.autoSize = "left";
    if (_level0.myURL == undefined) {
        myTxt.text = "myURL is not defined";
    } else {
        myTxt.text = _level0.myURL;
    }
    

    在发布 Flash 文档时,默认情况下会在 SWF 文件所在的目录下创建一个 HTML 文档。如果没有创建 HTML 文件,请选择"文件">"发布设置",确保选择了"格式"选项卡中的 HTML。然后再次发布文档。

    以下代码演示了文档中负责将 Flash 文档嵌入到 HTML 页中的 HTML。需要查看此 HTML 以了解在下一步(为 URL 变量增加额外的代码)中 URL 变量是如何工作的。

    <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="550" height="400" id="urlvariables" align="middle">
    <param name="allowScriptAccess" value="sameDomain" />
    <param name="movie" value="urlvariables.swf" />
    <param name="quality" value="high" />
    <param name="bgcolor" value="#ffffff" />
    <embed src="urlvariables.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="urlvariables" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer_cn" />
    </object>
    
  6. 要将变量从生成的 HTML 文档中传递给 Flash 文档,可以在路径和文件名 (urlvariables.swf) 之后传递变量。将粗体文本添加到在桌面上生成的 HTML 文件中。
    <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="550" height="400" id="urlvariables" align="middle">
    <param name="allowScriptAccess" value="sameDomain" />
    <param name="movie" value="urlvariables.swf?myURL=http://weblogs.macromedia.com" />
    <param name="quality" value="high" />
    <param name="bgcolor" value="#ffffff" />
    <embed src="urlvariables.swf?myURL=http://weblogs.macromedia.com" quality="high" bgcolor="#ffffff" width="550" height="400" name="urlvariables" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" />
    </object>
    
  7. 如果要将多个变量传递给 Flash,需要用"and"字符 (&) 分隔名称/值对。从步骤 6 中查找以下代码:
    ?myURL=http://weblogs.macromedia.com
    

    用以下文本将其替换掉:

    ?myURL=http://weblogs.macromedia.com&myTitle=adobe+News+Aggregator
    

    请注意,需要对 object 标签和 embed 标签做同样的更改,以保持所有浏览器之间的一致性。您可能会注意到单词被 + 号分隔开了。单词用这种方式隔开是因为值是 URL 编码的,+ 号表示单个空格。

    注意

    有关常见 URL 编码的特殊字符的列表,请参阅 Flash 技术说明,URL 编码:从文本文件中读取特殊字符

    因为"and"字符 (&) 用作不同名称/值对的分隔符,所以如果传递的值包含"and"字符,可能会出现意外的结果。考虑到名称/值对的性质和语法分析,如果您将以下值传递到 Flash,

    my.swf?name=PB+&+J&flavor=strawberry+rhubarb
    

    Flash 将在根范围中构建以下变量(和值):

    'name': 'PB ' (note space at end of value)
    ' J': '' (note space at beginning of variable name and an empty value)
    'flavor': 'strawberry rhubarb'
    

    为了避免这种情况,您需要将名称/值对中的"and"(&) 字符转义 为 URL 编码的等效字符 (%26)。

  8. 打开 urlvariables.html 文档,并查找以下代码:
    ?myURL=http://weblogs.macromedia.com&myTitle=Adobe+News+Aggregator
    

    用以下代码替换该代码:

    ?myURL=PB+%26+J&flavor=strawberry+rhubarb
    
  9. 保存修改的 HTML,再次测试 Flash 文档。

    您会看到 Flash 创建了以下名称/值对。

    'name': 'PB & J'
    'flavor': 'strawberry rhubarb'
    

    注意

    所有浏览器都将支持长达 64K(65535 字节)的字符串长度。为了能在所有浏览器中使用,必须在 objectembed 标签上指定 FlashVars。