`

JavaScript 和 Flash 的通信

阅读更多
JavaScript和Macromedia Flash的通信示例
原文地址: www.macromedia.com/support/flash/ts/documents/java_script_comm.htm
说明: 略作修改,主要是一些很初级的操作; 又很多相似的文章,不过这个很权威

下面是一些在Flash和使用Javascript的HTML文件直接通信的示例,每个示例都有简略的步骤

本文讨论了3种基本的Flash/Javascript通信方式:
Javascript 到 Flash的通信----使用Flash播放器的javascript方法
Flash 到 Javascript的通信----使用Flash的fscommand
Flash 到 Flash的通信----------使用本地连接对象或综合上2种技术

并不是所有的浏览器都很重视脚本.为了和Flash播放器通信,浏览器必须有内置的钩子以便Flash播放器可以'监听'.浏览器必须是下列的几种:
Netscape Navigator 3.0-4.7x, 和 Netscape 6.2或更高
(Windows 95/98/NT/2000/XP 或 MacOS; 允许Java和LiveConnect)
Internet Explorer 3.0 或更高
(仅Windows 95/98/NT/2000/XP; 允许ActiveX)

注意:Macintosh上的Internet Explorer和早期版本的Netscape6不支持这种方法.请查看本文的附加信息

Javascript到Flash的通信

这个例子演示了如何使用Flash的method把变量从HTML的input text 发送到该页面中的Flash文件中.HTML input的数据通过Flash的SetVariable方法传送到Flash文件中.


步骤:

Flash中
1.新建一个文件,保存为javascript_to_flash.fla
2.用文字工具在舞台上创建一个文本域
3.选择这个文本域,在属性面板中,从下拉列表中选择动态文本(Dynamic Text),在变量(variable)栏填上"myVar"
注意:最好的习惯是使用Instance,用myVar.text更改myVar的值.为了简单起见和兼容Flash4和Flash5,我们使用的是变量名的形式.
4.保存文件
5.发布HTML文件和SWF文件

Dreamweaver中
下一步的工作转移到Dreamweaver中了,当然也可以是其他的HTML编辑器
1.打开上一步发布的HTML文件
2.插入生成的SWF文件和OBJECT/EMBED标签
(1) Insert>Media>Flash,并选择这个Flash
(2) 切换到代码视图,我们需要修改被选中的<OBJECT>和<EMBED>标签
(3) 在OBJECT标签中,插入id="myFlash"

<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">

注意:如果你是粘贴复制代码的话,确保删除不必要的换行.否则可能会引起错误; id也可以在属性面板里直接输入
(4) 在EMBED标签中,插入name="myFlash"和swLiveConnect="true",确保没有使用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> 

3.创建表单域
(1) 回到设计视图
(2) 插入文本域(Insert> Form Object> Text Field),如果询问是否添加表单域,选择是
(3) 把文本域的HTML标签修改成这样:

引用
<input type="text" name="sendText" maxlength="45" onChange="doPassVar(this)">

每当文本域内容发生变化时,onChange就被触发,doPassVar()函数就被调用

4.创建传递变量值的Javascript函数
复制下面的Javascript到<head></head>标签内

<SCRIPT LANGUAGE=JavaScript>
<!--
function doPassVar(args){
var sendText = args.value;
   window.document.myFlash.SetVariable("myVar", sendText);
}
//-->
</SCRIPT>

5.保存文件,测试一下(F12)

Flash到Javascript的通信
从HTML可以发送数据到Flash,反过来也可以. 这个例子演示了如何应用Flash的Fscommand来发送数据到Javascript.
简要步骤:
Flash中
新建一个文件,保存为flash_to_javascript.fla
创建一个文本域,设置成输入文本(Input Text),选择"border"以便我们能看到他,指定他的变量为inputVar
创建一个按钮,在按钮上添加如下的as:

on (release) {
  fscommand ("send_var", inputVar);
}

保存文件,导出HTML和SWF

Dreamweaver中
1.打开导出HTML文件,修改<OBJECT>和<EMBED>标签,结果同上:
<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">

<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>

2. 插入如下的Javascript到<Body>标签内:
<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>


Flash和Flash的通信
通过上面两种方法的混和使用,同一HTML中两个或者更多的Flash直接可以相互传送消息. 从一个flash使用fscommand传送消息给Javascript,使用Flash的Javascript methods把消息传给另外一个flash
详细的看这里:Flash影片之间的通信示例

从Flash MX开始,local connection对象可以用来在flash之间传送消息. 这使得同一HTML中的或者位于两个浏览器窗口中的两个flash影片可以相互发送消息,而不必使用Javascript或者fscommand
详细的看这里:在Flash MX中使用local connection对象(英文)

本站的localConnection教程:http://www.blueidea.com/tech/multimedia/2003/739.asp

附可控制Flash Player的Javascript方法:
一览表:
引用
Play() ---------------------------------------- 播放动画
StopPlay()------------------------------------停止动画
IsPlaying()----------------------------------- 动画是否正在播放
GotoFrame(frame_number)---------------- 跳转到某帧
TotalFrames()------------------------------- 获取动画总帧数
CurrentFrame()------------------------------回传当前动画所在帧数-1
Rewind()-------------------------------------使动画返回第一帧
SetZoomRect(left,top,right,buttom)-------放大指定区域
Zoom(percent)------------------------------改变动画大小
Pan(x_position,y_position,unit)------------使动画在x,y方向上平移
PercentLoaded()----------------------------返回动画被载入的百分比
LoadMovie(level_number,path)----------- 加载动画
TGotoFrame(movie_clip,frame_number)- movie_clip跳转到指定帧数
TGotoLabel(movie_clip,label_name)------ movie_clip跳转到指定标签
TCurrentFrame(movie_clip)--------------- 回传movie_clip当前帧-1
TCurrentLabel(movie_clip)-----------------回传movie_clip当前标签
TPlay(movie_clip)---------------------------播放movie_clip
TStopPlay(movie_clip)----------------------停止movie_clip的播放
GetVariable(variable_name)-----------------获取变量
SetVariable(variable_name,value)-----------变量赋值
TCallFrame(movie_clip,frame_number)---call指定帧上的action
TCallLabel(movie_clip,label)----------------call指定标签上的action
TGetProperty(movie_clip,property)--------获取movie_clip的指定属性
TSetProperty(movie_clip,property,number)-设置movie_clip的指定属性


在 flash mx 以后,由于一系列的安全问题,比如载入另一个站点的 flash文件,然后用javascript控制 flash 跳转到不同的帧,让一些 flash 编写者在安全防范上防不胜防。为此 macromedia 改进了 flash player 和一些交互接口。引入了安全沙箱的概念,也就是可以设置一个可以进行控制的站点列表。

当然在同一个域名下,可以不考虑这个安全沙箱的问题。

更详细的接口和用法还有安全限制,请查看下面的PDF文件

另外我再提供一个 flash4 时代最顶尖的闪客 Dean 利用 javascript 和 flash进行交互的例子,这可是当时,最最眩目的页面了,html和flash结合紧密,而且保证了和 netscape 的兼容。

点击查看 看看我们4年前的闪客,在做什么?

另外,我在今年也有类似的应用,大家可以查看 bt 的专栏动画部分 ,在打开一个flash动画弹出框时,为了不影响音乐杂乱,我关闭了主场景的音乐开关。关闭弹出框时,打开主场景的音乐开关,这点,也主要是依靠 javascript 来进行对 flash 的控制的。


分享到:
评论

相关推荐

    JavaScript和Flash的通信(转)

    #### 一、JavaScript与Flash通信方式概述 根据提供的文件描述,我们可以总结出三种主要的通信方式: 1. **从JavaScript到Flash**:这种方式是通过调用Flash对象的方法来实现的。 2. **从Flash到JavaScript**:这种...

    javascript与flash通信

    javascript与flash通信例子

    JavaScript和Flash的通信.rar_javascript

    JavaScript和Flash之间的通信是Web开发中的一个重要话题,尤其是在过去的十几年里,当Flash在网页动画和交互性内容中占据主导地位时。尽管现在HTML5已经逐渐取代了Flash,但理解这两种技术如何协同工作仍然有价值,...

    flash和JavaScript通信

    在Web开发领域,Flash和JavaScript之间的通信是一种常见技术,它允许两种不同的技术栈协同工作,增强网页的功能性和交互性。 Flash曾经是实现动态内容和多媒体交互的重要工具,而JavaScript则是浏览器端的主要脚本...

    Flash与JavaScript的通信例子及总结(源码)

    Flash和JavaScript之间的通信主要基于两种技术:External Interface和Bridge技术。External Interface是AS3(ActionScript 3)中内置的功能,允许Flash内容与宿主环境(通常是网页)中的JavaScript进行双向通信。...

    javascript与flash之间的交互(例子)

    JavaScript 和 Flash 之间的交互是 Web 开发中的一个重要概念,尤其在早期互联网时代,Flash 被广泛用于创建动态内容和富媒体应用。然而,随着 HTML5 的崛起,Flash 已逐渐淡出,但理解两者之间的交互仍然对历史背景...

    一个flash和javascript通信的例子

    标题 "一个Flash和JavaScript通信的例子" 涉及的核心技术是Flash与JavaScript之间的交互,也称为Flash External Interface(简称FEI)或者ActionScript JavaScript Bridge(AS3 JSBridge)。这种技术允许网页中的...

    javascript_to_flash.zip

    这是JavaScript到Flash通信的基础。 3. **JavaScript调用Flash** - 使用`ExternalInterface.addCallback`方法,Flash对象可以注册一个函数,使得JavaScript能够调用这个函数。 - JavaScript通过Flash对象的`call`...

    flash+java通信例子

    3. **Socket通信**:如果需要进行低级别的双向通信,Flash和Java可以通过TCP或UDP套接字进行直接通信。但这需要在服务器端开放特定的端口,并处理跨域安全问题。 4. **AMF(Action Message Format)**:这是一种二...

    FLASH CS3(AS3)和JS之间通信

    `show.html`是包含Flash内容的HTML页面,可能使用了`ExternalInterface`或`flashvars`来与Flash通信。`c.swf`是编译后的Flash影片,它会被嵌入到`show.html`中。 在实际应用中,Flash与JavaScript的通信可以用于...

    javascript与flash相互调用

    1. **ExternalInterface API**:这是Flash Player提供的一种接口,使得ActionScript(Flash的编程语言)能够与网页中的JavaScript进行通信。通过ExternalInterface.addCallback方法,Flash对象可以注册一个函数,使...

    Javascript+Flash实现图片切换

    ActionScript可以与JavaScript通信,通过`ExternalInterface`类实现交互,这样JavaScript可以触发Flash中的图片切换。 5. **参数传递**:图片路径和链接路径需要在HTML中作为参数传递给Flash,这可以通过`&lt;embed&gt;`...

    JavaScript+flash实现相册功能

    两者通过合适的接口通信,如 ExternalInterface,在JavaScript和Flash之间传递数据和控制命令,实现无缝集成。 在实际项目中,可能还需要考虑到浏览器兼容性和移动设备支持。由于一些现代浏览器默认禁用了 Flash,...

    Javascript与flash交互通信基础教程

    本教程将介绍Flash与JavaScript交互通信的三种基础方式:从JavaScript到Flash的通信、从Flash到JavaScript的通信以及Flash之间的通信。 首先,需要了解能够实现这些通信技术的浏览器环境。并不是所有浏览器都支持...

    vb 与flash9直接通信的实例

    以下是VB与Flash通信的一些关键知识点: 1. **ActiveX控件**:VB通过引用Flash9.ocx,将Flash作为ActiveX控件嵌入到VB窗体中,从而能在VB环境中控制Flash的行为。 2. **ActionScript与VB通信接口**:Flash的...

    javascript和actionscript之间通信实例

    JavaScript 和 ActionScript 之间的通信是跨平台开发中的一个重要概念,特别是在构建富互联网应用程序(RIA)时,例如使用 Adobe Flash 平台。这两种语言虽然在不同的环境中运行,但可以通过多种技术实现交互,为...

    Javascript与Flash中的Socket交互

    本文将详细讲解如何在 Flash 和 JavaScript 之间实现 Socket 通信。 首先,我们需要理解 Flash 中的关键概念。帧是构成 Flash 动画的基本单位,关键帧是定义动画关键状态的帧,而过渡帧则是 Flash 自动计算出来的...

    一个实现ActionScript 与JavaScript 进行相互通信的程序例子

    当需要在Flash内容与网页之间进行数据交换时,就需要实现ActionScript与JavaScript之间的通信。本程序例子旨在展示这种跨平台通信的实现方法。 ActionScript,基于ECMAScript,是Adobe Flash Player和Adobe AIR中的...

    Javascript+flash实现的超炫图片效果

    两者通过特定的接口进行通信,例如通过JavaScript调用Flash对象的方法,或者Flash通过 ExternalInterface 接口向JavaScript传递数据。 为了实现这样的效果,开发者需要具备扎实的JavaScript基础,了解DOM操作、事件...

Global site tag (gtag.js) - Google Analytics