◇关于FSCommand...◇
“FSCommand”是Flash系统用来和支持他的其他应用程序(指那些可以播放Flash电影的应用程序,如:独立播放器‘Flash Player’或安装了插件的浏览器)互相传达命令的工具。
在WEB上,FSCommand的典型应用是Flash发送命令给脚本语言(Javascript或VBScript)或脚本语言发送命令给Flash。一般地,基于WEB的FSCommand的用法有:a)在Keyframe或按钮的Action里调用一个脚本程序;b)脚本程序控制Flash Movie的播放(停止,播放,或使指针跳到某一特定Frame即Goto Frame)。在Flash里已经内建有一系列专供Flash Player使用的FSCommand:Quit,FullScreen,Exec,Show Menu。具体可以查看Flash的帮助文件。由于Flash 4在这方面并未做太大改动,只加进了Expression以扩大其使用灵活性,因此,本文仍以Flash 3做讲解。至于Expression的使用请参看有关文章。
>> 支持FSCommand <<
支持FSCommand的浏览器有:运行于Win95/98/NT和Mac PPC的Netscape 3及以上;运行于Win95/98/NT的Internet Explorer 3及以上;装有ActiveX(IE)或LiveConnect(Netscape)的运行于Win 3.1或Mcintosh 68K上的浏览器及在Mac上的IE。另外,从Flash 3开始,如果要在Netscape里使用FSCommand,必须在每页里加上LiveConnect=True语句。
>> 传递命令的两个方向 <<
FSCommand如何工作取决于是由Flash或Javascript发送指令或接收指令。这两种方式虽然都和FSCommand有关,但是,他们的操作却是不同的,本文将分别讲解,但是,请记住:在实际应用里,往往会同时用到二者,即协同更复杂的工作。
>> Flash对JavaScript的调用 <<
Flash对Javascript调用是通过在Keyframe的属性或按钮的Action里设置命令。当浏览器接收到来自于Flash的FSCommand时,便会检查是否有可供调用的Javascript函数(或IE使用的VBScript)。如果有,就运行他,并发送两个参数:“Command”和“Argument”。
下面,让我们来看一个例子:
1)在Flash里设置FSCommand命令
在FScommand的对话框里有两栏:Command和Argument,这里面所填的内容将被传到调用的函数里作为参数。一般说来:Command栏填的是你想调用的函数名;Argument栏则填上函数使用的参数。在本例中:Command栏填“call_alert”;Argument栏填“Hello world”
2)将Movie嵌入HTML文档中
这份文档可以用ShockWave生成,注意要有“swLiveConnect="true"”语句。
3)加入被调用的Javascript函数
将代码放入<Head>里:
<SCRIPT LANGUAGE="Javascript>
<!---
function testmovie_DOFSCommand(command,args)
{
if(command="call_alert")
alert("Here's the Flash message:"+args);
}
//-->
</SCRIPT>
这里有些地方需注意:语句testmovie_DOFSCommand意思是调用该函数的Movie名是testmovie,这是由你起的;而DOFSCommand则是Flash执行FScommand的专用语句,一定要有。本例中,该命令将传出两个参数:call_alert和Hello World!
好了,这就是Flash调用Javascript函数的方法。其实,在不需要传递函数参数的情况下,用Get URL来调用Javascript将更简单。
>> JavaScript对Flash的控制 <<
与上面相反的是,Javascript也可以控制Flash Movie的播放,方法是通过调用一些内建的Movie属性。而调用这些属性的方法和调用Javascript的内建属性(document.write()或window.close())是一样的。你可以完全在Javascript里控制Flash Movie的各种播放,而不需在Movie里做任何事情。
下面,我们就一个简单的例子来说明Javascript如何控制Flash Movie,你可以将他扩展到任何其他可用属性(关于这些属性,可以查看Macromedia Flash的相关文档):
1)和上例一样,先建立一个Movie;然后用Aftershock将其嵌入到HTML中;
2)在生成的HTML中加入控制Flash Movie的Javascript代码,本例中:
function playmovie()
{
movieobject(moviename).Play();
}
有一点很重要的是:当你调用一个尚未下载完的属性时,会发生什么情况?Errors!所以,你必须先做个检查:a)所用的Movie对象存在;b)它已下载完成,可以调用其属性。最简单也是最可靠的能同时检查是否满足上述两个条件的是:用Javascript调用Movie的PercentLoaded()属性来判断要控制的Movie对象是否已下载完成。
所以,上面的playmovie函数应改为:
var movie_ready="false"
function playmovie()
{
if(movie_ready=="false")
{
while(movie_ready=="false")
{
if(movieobject(moviename).PercentLoaded()==100)
{
movieobject(moviename).Play();
move_ready="true";
}
}
}
else
{movieobject(moviename).Play();
}
}
这样,函数便会等到要调用其属性的Movie对象下载完成后才开始作用,就不会出现错误了。记得要在整个调用函数之外初始化全局变量movie_ready,这样,他的值便会留在内存中而作用于整个Movie的播放过程。
3)加入调用该函数的事件
你可以:
<FORM>
<INPUT TYPE="BUTTON" VALUE="play" ONCLICK="playmovie()">
</FORM>
就这样!:)
4)扩展应用到其他属性
现在你已知道如何用Javascript调用Flash Movie的内建属性Play()了。还有不少属性可以调用,下面是Flash 3里可以用的属性(要得到最新的属性资料,请查看Mocromedia的相关文档)。
■Flash 2.0和Flash 3.0的通用属性:
Play():播放Movie
StopPlay():停止Movie
IsPlaying():检查Movie是否正在播放
GotoFrame(x):Goto到第"X"Frame,"X"为整数
TotalFrames():检查该Movie总共有多少个Frame
Rewind():Goto到Frame 1并停止
SetZoomRect(x1,y1,x2,y2):按给定坐标缩放矩形,其中x1,y1为左上角坐标;x2,y2为右下角坐标。其单位是TWIPS,这里1440 TWIPS折合1英寸,在一个点(Point)里有20个TWIPS。
Zoom(persent):放大。有以下几种情况:Zoom(50)=原来Movie的两倍;Zoom(200)=原来Movie的1/2大;Zoom(0)=返回原来大小。
Pan(x,y,mode);
PercentLoaded():检查Movie已下载了多少到浏览器里。并返回一个0到100的值。
■以下是Flash 3.0新增的属性:
在Flash 3里,Movie可以被“Tell Target”控制。这里面的可用的具体方法有:
TGotoFrame(target,framennumber);TGotLabel(target,framenumber)。
关于这两个方法,有几点须注意:1)"target"是一个字符串,必须加上双引号;2)"framenumber"是一个整数;3)"framenumber"在Javascript里是从0开始计算的,而在Flash里则是从1开始计算。看以下几个例子:
eg1:TGotoFrame("_level0/",5)------在主Movie的Timeline里,到第4个frame;
eg2:TGotoFrame("_level0/colours",5)-----在Instance name为colours的Movie Clips里,到第4个Frame;
eg3:TGotoLabel("_level0/","redframe")----在主Movie里,到一个label名为redframe的frame;
eg4:TGotoLabel("_level0/colours","greenframe")---在一个Instance name为colours的Movie Clip里,到一个label名为greenframe的frame;
除了以上两个方法,tell Target还有以下方法:
TCurrent(target):返回当前正在播放的Movie的播放指针所正在的frame的数值。用"_level0/"指向主Movie;
String TCurrentLabel(target):同上,但返回的是字符串Label名,如果该Frame没有Label 名,则返回null。也是用"_level0/"指向主Movie;
TPlay(target):播放指定的Movie Clip;
TStopplay(target):停止播放指定的Movie Clip;
LoadMovie(layer,url):从指定url里Load一个Movie到指定的Layer类,注意Layer必须是整数;url必须加上双引号。
■下面再提供一些关于FSCommand的资源,E文好的朋友可以去取取经:
1)Macromedia的技术文档:Scripting With Flash
2)Macromedia的教程:Scripting With Flash and ActiveX
3)Javascript/Flash Clock Toturial 介绍用FSCommand做Flash时钟的教程(本站也有介绍)
4)FSCommand methods Table 一个很完整的介绍了可供Jvascript使用的FSCommand的方法,包括Active X和独立播放器(stand-alnoe Player)。
“FSCommand”是Flash系统用来和支持他的其他应用程序(指那些可以播放Flash电影的应用程序,如:独立播放器‘Flash Player’或安装了插件的浏览器)互相传达命令的工具。
在WEB上,FSCommand的典型应用是Flash发送命令给脚本语言(Javascript或VBScript)或脚本语言发送命令给Flash。一般地,基于WEB的FSCommand的用法有:a)在Keyframe或按钮的Action里调用一个脚本程序;b)脚本程序控制Flash Movie的播放(停止,播放,或使指针跳到某一特定Frame即Goto Frame)。在Flash里已经内建有一系列专供Flash Player使用的FSCommand:Quit,FullScreen,Exec,Show Menu。具体可以查看Flash的帮助文件。由于Flash 4在这方面并未做太大改动,只加进了Expression以扩大其使用灵活性,因此,本文仍以Flash 3做讲解。至于Expression的使用请参看有关文章。
>> 支持FSCommand <<
支持FSCommand的浏览器有:运行于Win95/98/NT和Mac PPC的Netscape 3及以上;运行于Win95/98/NT的Internet Explorer 3及以上;装有ActiveX(IE)或LiveConnect(Netscape)的运行于Win 3.1或Mcintosh 68K上的浏览器及在Mac上的IE。另外,从Flash 3开始,如果要在Netscape里使用FSCommand,必须在每页里加上LiveConnect=True语句。
>> 传递命令的两个方向 <<
FSCommand如何工作取决于是由Flash或Javascript发送指令或接收指令。这两种方式虽然都和FSCommand有关,但是,他们的操作却是不同的,本文将分别讲解,但是,请记住:在实际应用里,往往会同时用到二者,即协同更复杂的工作。
>> Flash对JavaScript的调用 <<
Flash对Javascript调用是通过在Keyframe的属性或按钮的Action里设置命令。当浏览器接收到来自于Flash的FSCommand时,便会检查是否有可供调用的Javascript函数(或IE使用的VBScript)。如果有,就运行他,并发送两个参数:“Command”和“Argument”。
下面,让我们来看一个例子:
1)在Flash里设置FSCommand命令
在FScommand的对话框里有两栏:Command和Argument,这里面所填的内容将被传到调用的函数里作为参数。一般说来:Command栏填的是你想调用的函数名;Argument栏则填上函数使用的参数。在本例中:Command栏填“call_alert”;Argument栏填“Hello world”
2)将Movie嵌入HTML文档中
这份文档可以用ShockWave生成,注意要有“swLiveConnect="true"”语句。
3)加入被调用的Javascript函数
将代码放入<Head>里:
<SCRIPT LANGUAGE="Javascript>
<!---
function testmovie_DOFSCommand(command,args)
{
if(command="call_alert")
alert("Here's the Flash message:"+args);
}
//-->
</SCRIPT>
这里有些地方需注意:语句testmovie_DOFSCommand意思是调用该函数的Movie名是testmovie,这是由你起的;而DOFSCommand则是Flash执行FScommand的专用语句,一定要有。本例中,该命令将传出两个参数:call_alert和Hello World!
好了,这就是Flash调用Javascript函数的方法。其实,在不需要传递函数参数的情况下,用Get URL来调用Javascript将更简单。
>> JavaScript对Flash的控制 <<
与上面相反的是,Javascript也可以控制Flash Movie的播放,方法是通过调用一些内建的Movie属性。而调用这些属性的方法和调用Javascript的内建属性(document.write()或window.close())是一样的。你可以完全在Javascript里控制Flash Movie的各种播放,而不需在Movie里做任何事情。
下面,我们就一个简单的例子来说明Javascript如何控制Flash Movie,你可以将他扩展到任何其他可用属性(关于这些属性,可以查看Macromedia Flash的相关文档):
1)和上例一样,先建立一个Movie;然后用Aftershock将其嵌入到HTML中;
2)在生成的HTML中加入控制Flash Movie的Javascript代码,本例中:
function playmovie()
{
movieobject(moviename).Play();
}
有一点很重要的是:当你调用一个尚未下载完的属性时,会发生什么情况?Errors!所以,你必须先做个检查:a)所用的Movie对象存在;b)它已下载完成,可以调用其属性。最简单也是最可靠的能同时检查是否满足上述两个条件的是:用Javascript调用Movie的PercentLoaded()属性来判断要控制的Movie对象是否已下载完成。
所以,上面的playmovie函数应改为:
var movie_ready="false"
function playmovie()
{
if(movie_ready=="false")
{
while(movie_ready=="false")
{
if(movieobject(moviename).PercentLoaded()==100)
{
movieobject(moviename).Play();
move_ready="true";
}
}
}
else
{movieobject(moviename).Play();
}
}
这样,函数便会等到要调用其属性的Movie对象下载完成后才开始作用,就不会出现错误了。记得要在整个调用函数之外初始化全局变量movie_ready,这样,他的值便会留在内存中而作用于整个Movie的播放过程。
3)加入调用该函数的事件
你可以:
<FORM>
<INPUT TYPE="BUTTON" VALUE="play" ONCLICK="playmovie()">
</FORM>
就这样!:)
4)扩展应用到其他属性
现在你已知道如何用Javascript调用Flash Movie的内建属性Play()了。还有不少属性可以调用,下面是Flash 3里可以用的属性(要得到最新的属性资料,请查看Mocromedia的相关文档)。
■Flash 2.0和Flash 3.0的通用属性:
Play():播放Movie
StopPlay():停止Movie
IsPlaying():检查Movie是否正在播放
GotoFrame(x):Goto到第"X"Frame,"X"为整数
TotalFrames():检查该Movie总共有多少个Frame
Rewind():Goto到Frame 1并停止
SetZoomRect(x1,y1,x2,y2):按给定坐标缩放矩形,其中x1,y1为左上角坐标;x2,y2为右下角坐标。其单位是TWIPS,这里1440 TWIPS折合1英寸,在一个点(Point)里有20个TWIPS。
Zoom(persent):放大。有以下几种情况:Zoom(50)=原来Movie的两倍;Zoom(200)=原来Movie的1/2大;Zoom(0)=返回原来大小。
Pan(x,y,mode);
PercentLoaded():检查Movie已下载了多少到浏览器里。并返回一个0到100的值。
■以下是Flash 3.0新增的属性:
在Flash 3里,Movie可以被“Tell Target”控制。这里面的可用的具体方法有:
TGotoFrame(target,framennumber);TGotLabel(target,framenumber)。
关于这两个方法,有几点须注意:1)"target"是一个字符串,必须加上双引号;2)"framenumber"是一个整数;3)"framenumber"在Javascript里是从0开始计算的,而在Flash里则是从1开始计算。看以下几个例子:
eg1:TGotoFrame("_level0/",5)------在主Movie的Timeline里,到第4个frame;
eg2:TGotoFrame("_level0/colours",5)-----在Instance name为colours的Movie Clips里,到第4个Frame;
eg3:TGotoLabel("_level0/","redframe")----在主Movie里,到一个label名为redframe的frame;
eg4:TGotoLabel("_level0/colours","greenframe")---在一个Instance name为colours的Movie Clip里,到一个label名为greenframe的frame;
除了以上两个方法,tell Target还有以下方法:
TCurrent(target):返回当前正在播放的Movie的播放指针所正在的frame的数值。用"_level0/"指向主Movie;
String TCurrentLabel(target):同上,但返回的是字符串Label名,如果该Frame没有Label 名,则返回null。也是用"_level0/"指向主Movie;
TPlay(target):播放指定的Movie Clip;
TStopplay(target):停止播放指定的Movie Clip;
LoadMovie(layer,url):从指定url里Load一个Movie到指定的Layer类,注意Layer必须是整数;url必须加上双引号。
■下面再提供一些关于FSCommand的资源,E文好的朋友可以去取取经:
1)Macromedia的技术文档:Scripting With Flash
2)Macromedia的教程:Scripting With Flash and ActiveX
3)Javascript/Flash Clock Toturial 介绍用FSCommand做Flash时钟的教程(本站也有介绍)
4)FSCommand methods Table 一个很完整的介绍了可供Jvascript使用的FSCommand的方法,包括Active X和独立播放器(stand-alnoe Player)。
我记得是loadURL("javascript:test()")
flash必须放在这个网页内哦!
我用的是 .Net开发,在用户登录的时候需要点一个运行于服务器端的按钮,按钮在提交给一个函数
<input type="submit" name="GSecurityLogin:bS" value="登录" onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" id="GSecurityLogin_bS" style="" />由于美工的需要,程序把握的登录用户名、密码和提交放在一个隐藏的 <DIV>中,用Flash这个漂亮的登录界面,这一步到现在实现了在Flash中点Flash的“提交”按钮触发真正的提交按钮事件,我本来想也就是执行
onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " 这段代码,可是出错了!!!!!跟踪了半天,发现结果如下:我发现 Page_ClientValidate 函数是提交前需要进行验证工作function Page_ClientValidate() {
var i;
for (i = 0; i < Page_Validators.length; i++) {
ValidatorValidate(Page_Validators[i]);
}
ValidatorUpdateIsValid();
ValidationSummaryOnSubmit();
Page_BlockSubmit = !Page_IsValid;
return Page_IsValid;
}
。。
最终在调用 这个函数后提交到服务器function ValidatorCommonOnSubmit() {
event.returnValue = !Page_BlockSubmit;
Page_BlockSubmit = false;
}程序运行到这里出问题了,event为空!!!!!!1!
原来,点Flash上的按钮不产生IE的事件~~~~~!!!我现在就是想 在点Flash中的按钮的时候,调用我的javascript函数
我的javascript函数 new 一个event 给IE
然后提交