以下是使用 JavaScript在 Macromedia Flash 和 HTML 文档之间进行通信的多个示例,在这些示例后面的是重新创建每个示例的步骤。
要充分利用以下这些方法的好处,需要具有 JavaScript 的应用知识。这些应用知识并不在本技术说明中介绍,但可以使用许多资源来了解 JavaScript。有关详细信息,请参阅本文档底部的其他信息。有经验的脚本撰写人员应该阅读使用 Flash 撰写脚本 * 这篇文章,以了解可控制 Macromedia Flash Player 的 JavaScript 方法的概述。
本技术说明中讨论了 Flash/JavaScript 通信的三种基本类型:
fscommand 并非所有浏览器都具有浏览器脚本撰写功能。为了与 Flash Player 通信,浏览器必须具有 Flash Player 可以“听”到的内置挂钩程序。浏览器要求列示如下:
(Windows 95/98/NT/2000/XP 或 MacOS;LiveConnect 和支持 Java 的浏览器)
(仅限于 Windows 95/98/NT/2000/XP;支持 ActiveX 的浏览器)
注:Macintosh 上的 Internet Explorer 以及 Netscape 6 的早期版本不支持此方法。有关详细信息,请参阅本文档底部的其他信息。
此示例演示如何使用 Flash 方法将变量从 HTML 输入文本字段发送至嵌入到同一个 HTML 文档的 Flash 文件。在 HTML 输入字段中输入的日期将使用 Flash 方法 SetVariable 填充 Flash 文件中的文本字段。
查看示例: 示例 1 *
javascript_to_flash.zip (17K)
javascript_to_flash.fla。 选择该文本字段,然后在“属性”面板中,从下拉式菜单选择“动态文本”,然后在变量字段中输入“myVar”。
注:最佳的编码做法要求使用“实例”字段,这会需要用到 myVar.text。为简单起见以及保持此方法与 Flash 4 和 5 的向后兼容性,我们使用变量字段。

以下说明特定于 Dreamweaver,但可以使用任何 HTML 编辑器通过相同的方法手动编辑代码。
插入 Flash 媒体和 OBJECT/EMBED 代码
在 OBJECT 标签中,输入值 id="myFlash"(如果此值不存在的话)。还应确保值 name="myFlash" 未出现在代码的第一部分(标签的 OBJECT 主部分)中。
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=5,0,0,0"
width=366 height=142 id="myFlash">
注:如果复制并粘贴到 Dreamweaver 中,请务必删除脚本中可能的多余换行符。否则,可能会产生页面错误。
注:Netscape 6.2 及更高版本要求删除 object 标签的 name 属性,以允许脚本通信。Dreamweaver 在属性检查器中提供一个字段,此字段会自动写入两个属性,因此需要手动编辑代码以确保标签正确。
在标签的 EMBED 部分,输入值 name="myFlash" 和 swLiveConnect="true"(如果这些值不存在的话)。确保此部分(EMBED 标签)没有“id”值。
<embed src="javascript_to_flash.swf" quality=high width=366 height=142
type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?
P1_Prod_Version=ShockwaveFlash"
name="myFlash" swLiveConnect="true">
</embed>
</object>
修改文本字段的 HTML 标记,如下所示:<input type="text" name="sendText" maxlength="45" onChange="doPassVar(this)">
当更改文本字段的内容后,会自动调用 onChange 处理函数。当出现更改时,会调用 doPassVar() 函数(请参阅下一步骤)。
将以下 JavaScript 复制并粘贴到 HTML 源代码的 <head> 和 </head> 标签之间:
<SCRIPT LANGUAGE=JavaScript>
<!--
function doPassVar(args){
var sendText = args.value;
window.document.myFlash.SetVariable("myVar", sendText);
}
//-->
</SCRIPT>
每当对文本字段进行更改时,会调用此 JavaScript 函数。它使用 Flash JavaScript 方法 SetVariable 将 Flash 影片中的变量 myVar 设置为在 HTML 文本表单字段中输入的值。
除了可将数据从 HTML 页面发送到 Flash 影片外,也可以反过来进行。此示例演示如何使用 Flash 的 fscommand * 动作将字符串从 Flash 发送到 JavaScript 处理函数。出于演示目的,显示了一个 JavaScript 警告框,其中包含从 Flash 发送到浏览器的值。
查看示例: 示例 2 *
flash_to_javascript.zip (17K)
flash_to_javascript.fla。 将以下 fscommand 动作添加到该按钮:
on (release) {
fscommand ("send_var", inputVar);
}
以下说明特定于 Dreamweaver,但可以使用任何 HTML 编辑器通过相同的方法手动编辑代码。
在 OBJECT 标签中,输入值 id="myFlash"(如果此值不存在的话)。还应确保值 name="myFlash" 未出现在代码的第一部分(标签的 OBJECT 主部分)中。
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=5,0,0,0"
width=366 height=142 id="myFlash">
注:如果复制并粘贴到 Dreamweaver 中,请务必删除脚本中可能的多余换行符。否则,可能会产生页面错误。
注:Netscape 6.2 及更高版本要求删除 object 标签的 name 属性,以允许脚本通信。Dreamweaver 在属性检查器中提供一个字段,此字段会自动写入两个属性,因此需要手动编辑代码以确保标签正确。
在标签的 EMBED 部分,输入值 name="myFlash" 和 swLiveConnect="true"(如果这些值不存在的话)。确保此部分(EMBED 标签)没有“id”值。
<embed src="javascript_to_flash.swf" quality=high
width=366 height=142
type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?
P1_Prod_Version=ShockwaveFlash" name="myFlash" swLiveConnect="true">
</embed>
</object>
在打开 HTML 文档中的标签后, 插入以下代码:
<SCRIPT LANGUAGE=JavaScript>
<!--
var InternetExplorer = navigator.appName.indexOf("Microsoft") != -1;
function myFlash_DoFSCommand(command, args) {
var myFlashObj = InternetExplorer ? myFlash :document.myFlash;
alert (args);
}
if (navigator.appName && navigator.appName.indexOf("Microsoft") != -1 &&
navigator.userAgent.indexOf("Windows")
!= -1 && navigator.userAgent.indexOf("Windows 3.1") == -1) {
document.write('<SCRIPT LANGUAGE=VBScript\> \n');
document.write('on error resume next \n');
document.write('Sub myFlash_FSCommand(ByVal command, ByVal args)\n');
document.write(' call myFlash_DoFSCommand(command, args)\n');
document.write('end sub\n');
document.write('</SCRIPT\> \n');
}
//-->
</SCRIPT>
执行警告的特定函数以红色突出显示。有关 Javascript 的更多详细信息,请参阅其他信息。
对于同一个 HTML 文档中的两个或更多 Macromedia Flash 影片,通过将以上讨论的两种方法组合使用,它们可以互相发送消息。使用 fscommand 将消息从 Flash 影片发送到 Web 浏览器,并使用 Flash 的 JavaScript 方法将消息从浏览器发送到 Flash 影片。有关这方面的详细信息,请参阅Flash 影片之间的通信示例(技术说明 15692)*。
从 Macromedia Flash MX 开始,本地连接对象可以用于 Flash 到 Flash 通信。对于同一个 HTML 文档或两个浏览器窗口中的两个 Flash 影片,这可使它们在不使用 JavaScript 或 fscommand 动作的情况下互相发送信息。有关详细信息,请参阅在 Macromedia Flash MX 中使用本地连接对象 *。
有关包含通过函数发送 JavaScript 命令的示例的技术文章,请参阅使用 Flash 撰写脚本 *。有关 JavaScript 的详细信息,请访问 Webmonkey.com。
有关 Macintosh 上的 Internet Explorer 的信息,请参考 Macintosh 平台上的 Flash 和 Internet Explorer 问题(技术说明 13638)*。
有关 Netscape 和 Mozilla 支持的信息,请参考 Netscape 6、6.01 和 Mozilla(技术说明 14625)*。
有关哪些浏览器支持不同功能的完整矩阵表,请参阅每种浏览器所支持的特定 Flash 功能的完整列表(技术说明 14159)*。
有关可控制 Macromedia Flash Player 的 JavaScript 方法的概述,请参考使用 Flash 撰写脚本(文章)*。