啊忘记了。。要登陆才能看[原创]巧用addProperty和Flash::SetVariable调用FlashMX的函数 反正我是菜鸟。这个是我刚想的。如果没有人知道的话,就是我原创了吧。。 在FLASH中,要调用JAVASCRIPT,可以发送FSCommand 但是要JavaScript实时调用Flash的函数,实在是难。。 下面是在FLASH MX下实现的一个方法: 原理是通过用oFlash.SerVarible设置变量的属性,调用property set来进行处理的。 <!------HTML CODE -------> <HTML> <HEAD> <meta http-equiv=Content-Type content="text/html; charset="> <TITLE>Untitled-2</TITLE> </HEAD> <BODY bgcolor="#FFFFFF"> <!-- URL's used in the movie--> <!-- text used in the movie--> <!--sdfasdfasdfasdf--><OBJECT id="oFlash" classid="clsid27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="550" HEIGHT="400" id="Untitled-2" ALIGN=""> <PARAM NAME=movie VALUE="Untitled-2.swf"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="Untitled-2.swf" quality=high bgcolor=#FFFFFF WIDTH="550" HEIGHT="400" NAME="Untitled-2" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED> </OBJECT> </BODY> <script> function window.onload() { oFlash.SetVariable("_root.tasker.todo","showtime"); } </script> </HTML> //ActionScript Of Frame1 //----------------------------------------------- _root.tasker=new ClassTasker(); function ClassTasker() { this.addProperty("todo",nullfunction,DoIt); function nullfunction(){} function DoIt(str) { eval(str)(); } } function showtime() { //_root.vInput是一个Dynamic Text用来显示结果 _root.vInput=new Date(); } __________________ 从FlashMX开始。这个是我从C:\WINNT\system32\Macromed\Flash\swflash.ocx抽取出来的东西。 大部分和FLASH内部的东西相关,我自己懒得去加描述了。。 属性: Property AlignMode As Long Property BackgroundColor As Long Property Base As String Property BGColor As String Property DeviceFont As Boolean Property EmbedMovie As Boolean Property FrameNum As Long Property Loop As Boolean Property Menu As Boolean Property Movie As String Property Playing As Boolean Property Quality As Long Property Quality2 As String Property ReadyState As Long read-only Property SAlign As String Property scale As String Property ScaleMode As Long Property Stacking As String Property SWRemote As String Property TotalFrames As Long read-only Property WMode As String 方法: Sub Back() Function CurrentFrame() As Long Function FlashVersion() As Long Sub Forward() Function FrameLoaded(ByVal FrameNum As Long) As Boolean Function GetVariable(ByVal name As String) As String Sub GotoFrame(ByVal FrameNum As Long) Function IsPlaying() As Boolean Sub LoadMovie(ByVal layer As Long, ByVal url As String) Sub Pan(ByVal x As Long, ByVal y As Long, ByVal mode As Long) Function PercentLoaded() As Long Sub Play() Sub Rewind() Sub SetVariable(ByVal name As String, ByVal value As String) Sub SetZoomRect(ByVal left As Long, ByVal top As Long, ByVal right As Long, ByVal bottom As Long) Sub Stop() Sub StopPlay() Sub TCallFrame(ByVal target As String, ByVal FrameNum As Long) Sub TCallLabel(ByVal target As String, ByVal label As String) Function TCurrentFrame(ByVal target As String) As Long Function TCurrentLabel(ByVal target As String) As String Function TGetProperty(ByVal target As String, ByVal property As Long) As String Function TGetPropertyNum(ByVal target As String, ByVal property As Long) As Double Sub TGotoFrame(ByVal target As String, ByVal FrameNum As Long) Sub TGotoLabel(ByVal target As String, ByVal label As String) Sub TPlay(ByVal target As String) Sub TSetProperty(ByVal target As String, ByVal property As Long, ByVal value As String) Sub TSetPropertyNum(ByVal target As String, ByVal property As Long, ByVal value As Double) Sub TStopPlay(ByVal target As String) Sub Zoom(ByVal factor As Long) 事件: Event FSCommand(ByVal command As String, ByVal args As String) Event OnProgress(ByVal percentDone As Long) Event OnReadyStateChange(ByVal newState As Long) ---------------------------------------------------------------- 下面对这些东西的在IE上的使用方法加加说明: 现在有这么一个FLASH: <OBJECT id="oFlash" classid="clsid27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="550" HEIGHT="400" id="Untitled-2" ALIGN=""> <PARAM NAME=movie VALUE="Untitled-2.swf"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="Untitled-2.swf" quality=high bgcolor=#FFFFFF WIDTH="550" HEIGHT="400" NAME="Untitled-2" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED> </OBJECT> 那么属性都可以放在:<PARAM>的标签里面设置,例如<PARAM NAME=quality VALUE=high> 在脚本使用这些东西,方法是:(注意大小写) <Script Language=JScript> //属性: oFlash.Menu=false;//那么按右键的时候,就不显示放大,缩小等选项了 //方法: alert(oFlash.FlashVersion());//在我的机子上是393216, //事件: oFlash.attachEvent("FSCommand",onabcdefg); function onabcdefg(command,args) { status="接收FSCommand: "+command+":"+args; } </Script>
反正我是菜鸟。这个是我刚想的。如果没有人知道的话,就是我原创了吧。。
在FLASH中,要调用JAVASCRIPT,可以发送FSCommand
但是要JavaScript实时调用Flash的函数,实在是难。。
下面是在FLASH MX下实现的一个方法:
原理是通过用oFlash.SerVarible设置变量的属性,调用property set来进行处理的。
<!------HTML CODE -------> <HTML>
<HEAD>
<meta http-equiv=Content-Type content="text/html; charset=">
<TITLE>Untitled-2</TITLE>
</HEAD>
<BODY bgcolor="#FFFFFF">
<!-- URL's used in the movie-->
<!-- text used in the movie-->
<!--sdfasdfasdfasdf--><OBJECT id="oFlash" classid="clsid27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
WIDTH="550" HEIGHT="400" id="Untitled-2" ALIGN="">
<PARAM NAME=movie VALUE="Untitled-2.swf"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="Untitled-2.swf" quality=high bgcolor=#FFFFFF WIDTH="550" HEIGHT="400" NAME="Untitled-2" ALIGN=""
TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED>
</OBJECT>
</BODY>
<script>
function window.onload()
{
oFlash.SetVariable("_root.tasker.todo","showtime");
}
</script>
</HTML>
//ActionScript Of Frame1
//-----------------------------------------------
_root.tasker=new ClassTasker();
function ClassTasker()
{
this.addProperty("todo",nullfunction,DoIt);
function nullfunction(){}
function DoIt(str)
{
eval(str)();
}
}
function showtime()
{
//_root.vInput是一个Dynamic Text用来显示结果
_root.vInput=new Date();
}
__________________
从FlashMX开始。这个是我从C:\WINNT\system32\Macromed\Flash\swflash.ocx抽取出来的东西。
大部分和FLASH内部的东西相关,我自己懒得去加描述了。。 属性:
Property AlignMode As Long
Property BackgroundColor As Long
Property Base As String
Property BGColor As String
Property DeviceFont As Boolean
Property EmbedMovie As Boolean
Property FrameNum As Long
Property Loop As Boolean
Property Menu As Boolean
Property Movie As String
Property Playing As Boolean
Property Quality As Long
Property Quality2 As String
Property ReadyState As Long read-only
Property SAlign As String
Property scale As String
Property ScaleMode As Long
Property Stacking As String
Property SWRemote As String
Property TotalFrames As Long read-only
Property WMode As String 方法:
Sub Back()
Function CurrentFrame() As Long
Function FlashVersion() As Long
Sub Forward()
Function FrameLoaded(ByVal FrameNum As Long) As Boolean
Function GetVariable(ByVal name As String) As String
Sub GotoFrame(ByVal FrameNum As Long)
Function IsPlaying() As Boolean
Sub LoadMovie(ByVal layer As Long, ByVal url As String)
Sub Pan(ByVal x As Long, ByVal y As Long, ByVal mode As Long)
Function PercentLoaded() As Long
Sub Play()
Sub Rewind()
Sub SetVariable(ByVal name As String, ByVal value As String)
Sub SetZoomRect(ByVal left As Long, ByVal top As Long, ByVal right As Long, ByVal bottom As Long)
Sub Stop()
Sub StopPlay()
Sub TCallFrame(ByVal target As String, ByVal FrameNum As Long)
Sub TCallLabel(ByVal target As String, ByVal label As String)
Function TCurrentFrame(ByVal target As String) As Long
Function TCurrentLabel(ByVal target As String) As String
Function TGetProperty(ByVal target As String, ByVal property As Long) As String
Function TGetPropertyNum(ByVal target As String, ByVal property As Long) As Double
Sub TGotoFrame(ByVal target As String, ByVal FrameNum As Long)
Sub TGotoLabel(ByVal target As String, ByVal label As String)
Sub TPlay(ByVal target As String)
Sub TSetProperty(ByVal target As String, ByVal property As Long, ByVal value As String)
Sub TSetPropertyNum(ByVal target As String, ByVal property As Long, ByVal value As Double)
Sub TStopPlay(ByVal target As String)
Sub Zoom(ByVal factor As Long) 事件:
Event FSCommand(ByVal command As String, ByVal args As String)
Event OnProgress(ByVal percentDone As Long)
Event OnReadyStateChange(ByVal newState As Long)
----------------------------------------------------------------
下面对这些东西的在IE上的使用方法加加说明:
现在有这么一个FLASH:
<OBJECT id="oFlash" classid="clsid27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
WIDTH="550" HEIGHT="400" id="Untitled-2" ALIGN="">
<PARAM NAME=movie VALUE="Untitled-2.swf"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="Untitled-2.swf" quality=high bgcolor=#FFFFFF WIDTH="550" HEIGHT="400" NAME="Untitled-2" ALIGN=""
TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED>
</OBJECT>
那么属性都可以放在:<PARAM>的标签里面设置,例如<PARAM NAME=quality VALUE=high> 在脚本使用这些东西,方法是:(注意大小写)
<Script Language=JScript>
//属性:
oFlash.Menu=false;//那么按右键的时候,就不显示放大,缩小等选项了
//方法:
alert(oFlash.FlashVersion());//在我的机子上是393216,
//事件:
oFlash.attachEvent("FSCommand",onabcdefg); function onabcdefg(command,args)
{
status="接收FSCommand: "+command+":"+args;
}
</Script>
(JScript版:http://lostinet.d2g.com/temp/public/delegate/)function Delegate(obj,func)
{
if(this.__proto__==Delegate.prototype)
trace("new Delegate()是不合法的调用方法");
return CreateDelegateMethod()
function CreateDelegateMethod()
{
var _Arguments=new Array();
function DelegateInstance()
{
if(obj==null)return;
var arr=new Array();
var i=0;
for(;i<arguments.length;i++)
arr.push(arguments[i]);
for(;i<_Arguments.length;i++)
arr.push(_Arguments[i]);
return func.apply(obj,arr);
}
DelegateInstance.PreInvoke=function()
{
return DelegateInstance.SetArguments(arguments)
}
DelegateInstance.SetArguments=function(args)
{
_Arguments=new Array();
for(var i=0;i<args.length;i++)
_Arguments.push(args[i]);
return DelegateInstance;
}
DelegateInstance.Detach=function()
{
_Arguments=new Array();
obj=null;
func=null;
}
DelegateInstance.toString=function(){
return "[DelegateInstance]";
}
return DelegateInstance;
}
}
//例子
var arr=new Array(1,3,4);//arr对象
trace(arr.join("."))//正常调用arr的方法。
var d=Delegate(arr,arr.join);//创建委托
trace(d(":"));//使用单个函数实现arr.join(":")
d.PreInvoke("*")//预先调用
trace(d());//启用预先调用的参数来调用arr.join => arr.join("*")
trace(Delegate(arr,arr.join).PreInvoke("|")());//一气呵成。