FScommand与javascript通讯

本文所有权属于Colin Moock所有;
英文原版链接为:http://moock.org/webdesign/flash/fscommand/
由于水平有限,其中难免有误,请多多包涵!
如要转载请通知本站,谢谢合作!

目录:

FS Command命令简介
对FS Command命令的支持
通讯的两个方向
怎样实现Flash 到 JavaScript的通讯
怎样实现JavaScript 到 Flash 的通讯
可取的 Flash JavaScript方法(未译)
相关内容参考(未译)

FS Command命令简介

本文写作的目的就是主要用“fscommand”函数探讨Flash与JavaScript之间的通讯的问题(Flash在Web浏览器中执行JavaScript声明)。但是,fscommand()函数的功能实际上要比这些强大得多。不用太多的细节描述,以下是fscommand()函数简短的概述:

“fscommand()”是Flash中一个函数的名字,它提供Flash 应用程序的通讯功能(“应用程序”的意思是任何可以播放Flash媒体的工具,无论是自然的,例如标准的独立的Flash Player播放器;还是插件的使用,例如Web浏览器)。例如,基于Web的fscommand()函数可以响应Flash按钮的click事件,执行JavaScript命令。(一会我们将看到JavaScript也可以控制Flash影片的回放功能)。Fscommand()函数也可以和Lingo语言通讯,并且也可以发送内建的命令集到Flash Player播放器中(例如“Quit”,“FullScreen”,“AllowScale”,“ShowMenu”)。

对FS Command命令的支持

好了,让我们回到主题:在Web中使用fscommand()函数。如果你打算为Web开发带有脚本的Flash影片,你必须意识到不是所有的浏览器都支持fscommand()函数。支持该函数的特殊浏览器有:

·netscape 3 or 4 on win95/98/nt and mac ppc
·internet explorer 3 and greater on win95/98/nt
·netscape 6.2 (and later) running flash player 6.0.40.0 (and later)

特殊的不支持fscommand()函数的浏览器有:

·运行在 windows 3.1上的浏览器
·运行在 macintosh 68k 机器上的浏览器
·任何在Mac上运行的IE
·netscape 6.1 和 6.0 运行 flash player 6.0.29.0 或者比较老的版本 (liveconnect 属性不支持mozilla遗留下来的插件。 使用mozilla需要更新插件,可以到这里去更新插件 mozilla plugin api). 察看 bugs 37710 和 18838.

不支持的浏览器缺少Active X(IE)或者LiveConnect(Netscape 4和更老的版本),要实现在插件和浏览器之间的通讯这些是必需的。此外,对于Flash 3,如果你正为Netscape 4开发包含fscommand 的Flash内容,你需要在每个页面明确的使用LiveConnect来管理包含脚本的Flash影片(你不必在Netscape 6.2和以后的版本使用LiveConnect)。对于支持LiveConnect的浏览器,应把这一属性包含在你的影片的EMBED 标签中,例如 swLiveConnect = “true”。 在执行的过程中,用户将在Netscape状态栏中看到 ”Starting Java…”,并且当Java加载时要等待一会。

通讯的两个方向

那么现在,我们知道了在哪里可以使用fscommand函数的功能;你也许想知道它是怎样工作的。我们首先检测基于fscommand功能的Flash到JavaScript的通讯。然后,我们将再看看发送信息的另一种方法:JavaScript到Flash的通讯。

怎样实现Flash 到 JavaScript的通讯

(在研究用fscommand()函数执行JavaScript代码之前,应该注意的是JavaScript也可以通过getURL()函数来调用,就象用锚标记<A>调用JavaScript一样)。GetURL()函数与fscommand()函数相比,会获得更广泛的浏览器的支持,暂且不提它为编码带来的便利。要了解更多的信息,参考用JavaScript调用getURL函数来开启一个窗口。现在让我们回到对fscommand()函数的讨论中)。

无论fscommand()函数是否执行,Flash都试图发送消息给JavaScritp。当浏览器收到一个来自Flash的fscommand命令,它会检测:是否存在一个与之匹配的JavaScript函数(或者IE浏览器中VB Script函数),该函数可以“捕获”fscommand命令。如果存在这样的函数,浏览器将执行这个“捕获”函数,并且发送两个参数给这个函数——这两个参数就是fscommand() 函数中“Command”和“Arguments”参数。

如下所示得图表图解了这个过程,该范例用fscommand()函数来调用JavaScript警告框。Fscommand的参数是”call_alert”和”Hello world!”,

如下所示:

fscommand(“call_alert”, “Hello world!”);

执行这个fscommand命令在Netscape和IE中有略微不同;下面的图示显示了该命令在两个浏览器中的传递(从Flash到JavaScript)。图示下面是相应的Flash范例,看看这个模型,我们接来就分析实现这一功能的细节。

观看演示

FS Command影片范例:Flash调用JavaScript警告框

让我们一起完成如上图所示的Flash调用JavaScript的FS Command方法。你可以下载这个范例1的Zip文件,它包括.fla,.swf和.html格式文件。具体操作如下(请注意:以下操作均在 Flash MX Professional 2004中进行):

1)在Flash中建立FS Command语句:

·新建一个影片,在时间线上开始的几桢上随意设置一个关键桢;

·选中该关键桢,按F9,打开动作面板;

·在动作面板中点击“动作”下面的“+”按钮,选择“全局函数”---“浏览器/网络”---fscommand()函数。然后,“fscommand”命令便加入到动作列表中。该函数参数包括两个部分“Command”和“Arguments”。这两个参数将被传递到JavaScript的“fscommand捕获”函数中。它们可以用在任何条件下,但是通常情况下,Command参数包含一个你想执行的函数名称;Arguments参数包含你提供的参数;

·在括号中输入“"call_alert", "Hello world!"”;

2)把你的影片嵌入到HTML文档中:

为你的影片建立一个HTML文档,并且使用OBJECT 和EMBED标记放置你的影片。在OBJECT 和EMBED标记中,确定你影片的名字,为OBJECT标记使用”ID”,为EMBED标记使用”NAME”。影片的名字是非常重要的,因为这个名字将被OBJECT 和EMBED标记识别出来。你的FS Command捕获函数将依靠影片的名字来识别所有捕获的FS Command命令。另外要记住的是对于Netscape浏览器的LiveConnect参数用“swLiveConnect = “true””来替换。你的页面应该象下面这样(ID、NAME和swLiveConnect都加粗了,不要忘记它们):

<HTML>

<HEAD>

<TITLE>My First FS Command</TITLE>

</HEAD>

<BODY>

<OBJECT

CLASSID="clsid : D27CDB6E-AE6D-11cf-96B8-444553540000"

WIDTH="100%"

HEIGHT="100%"

CODEBASE="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"

ID=testmovie>

<PARAM NAME="MOVIE" VALUE="mymovie.swf">

<PARAM NAME="PLAY" VALUE="true">

<PARAM NAME="LOOP" VALUE="true">    

<PARAM NAME="QUALITY" VALUE="high">

<PARAM NAME="SCALE" VALUE="SHOWALL">

<EMBED

NAME="testmovie"

SRC="mymovie.swf"

WIDTH="100%"

HEIGHT="100%"

PLAY="false"

LOOP="false"

QUALITY="high"

SCALE="SHOWALL"

swLiveConnect="true"

PLUGINSPAGE="
;http://www.macromedia.com/go/getflashplayer">

</EMBED>

</OBJECT>

</BODY>

</HTML>

3)为IE浏览器加入VB Script代码:

还记得在图示1中的第2个场景吗?IE浏览器使用很小的VB Script代码来捕获fscommand命令,然后把它传递给JavaScript。这就是接下来你要做的。把如下的VB Script代码放在HTML文档的HEAD标记内,确定把文字“testmovie”改为你在OBJECT 和EMBED标记为你的影片起的名字。

<SCRIPT LANGUAGE="VBScript">

<!--

// Catch FS Commands in IE, and pass them to the corresponding JavaScript function.

Sub testmovie_FSCommand(ByVal command, ByVal args)

call testmovie_DoFSCommand(command, args)

end sub

// -->

</SCRIPT>

4)加入JavaScript函数来捕获fscommand命令:

到目前为止,我们已经建立了影片,它可以发送fscommand命令到浏览器上;影片也已经被嵌入到HTML页面中,也建立了VB Script代码,它可以为JavaScript捕获fscommand命令——如果你的浏览器是IE的话。把如下的JavaScript代码放到HEAD标记中,确定把文字“testmovie” 改为你在OBJECT 和EMBED标记为你的影片起的名字。

<SCRIPT LANGUAGE="JavaScript">

<!--

function testmovie_DoFSCommand(command, args) {

if (command == "call_alert") {

alert("Here's the Flash message: " + args);

}

}

//-->

</SCRIPT>

对于JavaScript的一点解释。“testmovie_DoFSCommand”函数随时调用名称为“testmovie”的发送fscommand命令的影片。“DoFSCommand” 关键字是Flash用来识别的函数,该函数被fscommand命令加载。前缀“testmovie_”指出被命令调用的影片的名称。因此,当一个名为“testmovie”的影片调用FS Command命令时,名为“testmovie_DoFSCommand”的函数将被加载。“(command, args)”是传递给函数的两个参数,并传送我们在Flash动作面板输入的 “Command”和“Arguments”的参数值——“call_alert”和“Hello world!”

一旦你的JavaScript函数放置好了,你的FS Command函数就可以成功的加载警告框了。