`
talentnba
  • 浏览: 91099 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaScript调用swf中函数

阅读更多

在过去的一年里,对于开发人员来说使用flash与javascript通讯总会碰到一些麻烦的事情,从flash调用javascript函数已经没有什么问题了,因为我们可以使用getURL方法来直接调用,但是要想使用javascript返回flash在许多浏览器上几乎是不可能的。但是现在可以了。
Flash8的出现,这件事就变的比较容易了。J

The ExternalInterface API

        之前我们使用flash调用javascript函数,一般使用这样的方法:
代码:
  
getURL(“javascript:alert(‘hello webstudio.com.cn’);”);
  

但是使用这种方法从flash调用javascript函数仍存在许多困难。特别是在处理多个javascript函数调用问题上。ExternalInterface API可以与javascript实现无缝调用,并且它的能力达到可以在flash时间线使用。

在我们正式进入它的使用方法之前,我们需要确保在flash时间上可用,就要导入它的类向这样:
代码:
  
import flash.external.*;
  


现在它已经允许我们做的第一件事就是可以调用javascript函数了。

Call 调用方法

call方法对于ExternalInterface对象来说是一个静态方法,也就是说我们不需要使用ExternalInterface对象的实例来调用方法,我们可以直接通过对象类来调用,向这样:
代码:
  
ExternalInterface.call(functionName:String,Parameters);
  

这个方法有两个参数:
·    functionName – 你想要调用的javascript函数名要以字符串的形式
·    Parameters – 需要传递给javascript函数的参数,用逗号分开,是可选的。
这些是基本的内容,现在让我们来看一个例子:
1.    创建一个flash文档命名为external1.fla.
2.    创建两个层上面的层命为AS,下面的层命名为”内容”
3.    在内容层里面,创建一个文本域,将它设置为输入文本域,打开显示边框以方便你能看到,并给它取个名字为alert_txt,将它放在场景的左边。
4.    仍然在内容这一层上,拖动一个按钮组件于场景中并把它放在动态文本的右边,设置它的label为”Alert”并给它起个名字为alert_butn.
5.    选择上方的as层在第一帧上输入代码,
6.    //调用alert
7.     代码:
  
import flash.external.*;
alert_butn.clickHandler = function() {
   ExternalInterface.call("alert", alert_txt.text);
}

  


前面部分的代码是导入ExternalInterface类包。然后为按钮组件设置事件,当点击时调用javascript函数,并将文本中输入的文本通过externalInterface传递给javascript函数。
现在发布你的影片,将它和html放在服务器上,当你在服务器上测试时不论你在文本中输入什么信息,它都将显示在alert对话框中,但是如果你在本地测试,你可能就会发现当你点击按钮时,什么也没发生,这是由flashplayer的安全特性造成的。


演示文件


上面这个范例是一个方法的例子,使用getURL方法也可以做到,然而externalinterface不只是能做到这些,除了发送信息给javascript,它还可以通过addCallback方法接收从javascript返回的信息。

addCallback 方法

AddCallback方法允许javascript调用flash时间上函数,基本的语法结构如下:
代码:
  
ExternalInterface.addCallback(functionID:String,instance:Object,functionName:Function);
  

与call方法类似,它也是一个静态方法,它有三个参数
·    functionID - 从 JavaScript 调用 ActionScript 函数时可使用的名称。此名称不必与 ActionScript 方法的实际名称匹配。
·    instance - this 在该方法中被解析成的对象。此对象不一定是在其上可找到该方法的对象,您可以指定任何对象(或 null)。
·    functionName - 要从 JavaScript 调用的 ActionScript 方法。
现在让我们开始一个例子,在这个例子中我们将使用flash调用javascript的命令来请示用户输入色值,当色值输入后点击ok,对象返回到flash并更改它的色彩,如下方法:
1.    创建一个flash文档命名为external2.fla.
2.    与第一个例子相同,创建两层上层命名为as.下层命名为“内容”。
3.    在内容层拖动一个按钮组件至场景中,放在左上方,将label设为”变色”,实例名为change_butn.
4.    确保当前在”内容层”,绘制一个色值为0x000000的盒子,大小为100*100,当然这个没有限制。
5.    将这个方块转换为movieclip.实例名称命名为rec_mc.
6.    在第一帧上输入代码如下:
代码:
  
import flash.external.*;
//改变方块的色彩
function onChange(clr:Number) {
var temp_color:Color = new Color(rec_mc);
   temp_color.setRGB(clr);
}
//允许javascript调用onChang函数
ExternalInterface.addCallback("onChange", this, onChange);
//打开命今窗口
change_butn.clickHandler = function() {
   ExternalInterface.call("callPrompt", "你想用什么的色彩? (ex: 0xff0000)");
}

  


在代码的前边我们要先导入externalinterface类包,然后我们创建一个能改变场景中方块色彩的函数,完成后,我们调用addCallback 方法以使javascript可以调用flash的onChang函数。最后,我们针对按钮创建事件来调用javascript命令。
你需要发布swf和html,然后用编辑软件打开编辑器,如果你只是从flash调用javascirpt,那么你什么也不用做。但是如果你需要使用javascirpt调用flash函数,还有一些小的工作需要做。

在tilte标签的下方加入下面的javascript代码:如下:
代码:
  

<script language=JavaScript>
var me; //代表swf的id
//获取正确的引用
function getID(swfID) {
   if (navigator.appName.indexOf("Microsoft") > -1) {
      me = window[swfID];
   } else {
      me = document[swfID];
   }
}
//下面这段调用onChang函数并返回到flash.
function makeCall(str){
   me.onChange(str);
}
//下面这个函数是被flash调用的。
function callPrompt(str){
   makeCall(prompt(str));
}
</script>

  


开始,我们创建变量me来存放swf的引用。如果没有它,我们不能调用flash函数。然后我们使用函数getID通过条件针对不同的浏览器来设置引用,之后,我们创建makeCall函数,用来调用flash函数,最后我们创建由flash来调用的函数callPromt().它将调用makeCall函数来发送信息返回到flash.
在html的body标签的属性中加入onload,并设置它等于getID函数,如下:
代码:
  
<body bgcolor="#ffffff" >
  

注意,当我们设函数给onload事件,我们传递给它swf的id.它可以在swf的嵌入位置找到,现在,当页初始化完成后,函数getID将被调用,变量me就会被设置,以使javascript可以调用flash函数。
将文件上传到服务器上,并进行测试,当你点击按钮并在提示中输入色彩值,flash中的方块色就会改变。如下。

范例演示

在弹出窗口时如果你没有输入色彩值,而是点击了取消,会返回null空回flash.flash中的方块仍会保持原色。
最终源文件下载(source)

本人对上面的内容进行了一下整合,制作了一个终合范例,集成有显示swf信息,获取网址,调用对话框.

范例演示

分享到:
评论

相关推荐

    多文件上传组件添加了服务器反馈信息事件,可以接收每次上传文件后,服务器返回的文本信息,调用JAVASCRIPT函数

    多文件上传组件 temp.html 上传调用实例 update_.swf 上传FLASH文件 update.asp 接收示例 ASP...添加了每个文件上传完成时,调用JAVASCRIPT函数 challs_flash_onComplete() 函数 更新了错误处理系统 修正了部分BUG

    SWF(ActionScript3.0)与JavaScipt(JS)通信示例

    今天花了一些时间整理出来了Swf 文件与JavaScript通信的示例,...在HTML页中使用JavaScript,可以调用FlashPlayer中的ActionScript函数。ActionScript函数可以返回一个值,JavaScript会立即接收它作为该调用的返回值。

    JavaScript中跨域调用Flash的方法

    可是就是到了最后,将swf文件放到资源服务上后再调用时出来问题,我就想肯定又是让人蛋疼的跨域问题(CrossDomain)。后来在网上翻了半天终于把问题搞定。 首先,要让你的Flash能访问页面,你需要在&lt;embed&gt;标签

    多文件上传组件1.0.6 bate 版

    添加了列表中所有文件上传完成时触发事件,调用JAVASCRIPT函数challs_flash_onCompleteAll() 函数 challs_flash_onStart()和challs_flash_onComplete()事件,返回值添加了一个fileType属性,文件类型 1.0.2 bate ...

    flash调用js中的方法,让js传递变量给flash的办法及思路

    html 页中的 JavaScript 函数: 代码如下:function GetSwfUrl(){var pics1 = parseInt(Math.random()*5)+1;var pics2 = parseInt(Math.random()*5)+1;document.my_swfId.SetVariable(“pic01Num”, pics1);document....

    aws-swf-toolkit:用于 Amazon SWF 上工作流的 Node.js 框架

    它们形成了一个框架,用于在 Javascript 中编写和运行 Amazon SWF 活动和决策程序。 也可以看看 :适用于 Amazon SWF 的 Node.js 库 :Amazon SWF 的 Node.js 活动工作集合 swf-activity: 运行活动工作者 非常...

    网页FLV播放器(Flowplayer) v5.5.2

    使用flowplayer()函数调用播放器,第一个参数是播放器的id,第二个参数是播放器的路径,它是一个flash文件,一定要保证播放器的路径正确。 如果不是使用a标签调用视频文件,而是使用DIV来调用,则代码如下: ...

    appemit:AppEmit是可扩展的轻量级中间件,用于在应用程序(尤其是chrome浏览器)和本地程序之间进行通信,支持Flash Swf。 AppEmit是应用程序(尤其是chrome浏览器)与本地程序之间相互通信的易扩展的轻量级中间件,支持chrome打开rtsp,flash,swf

    AppEmit v1.1.03概述Appemit是... 在浏览器中调用第三方DLL,OCX组件以及系统winApi函数,tcc,python,lua等。 为本地硬件DLL驱动程序模块开发一个软件包插件,以操作和控制网页中的本地读卡器,打印机,扫描仪,高照

    JavaScript 复制功能代码 兼容多浏览器(ZeroClipboard)

    首先需要下载 Zero Clipboard的压缩包,解压后把文件夹中两个文件:ZeroClipboard.js 和 ZeroClipboard.swf 放入到你的项目中。 然后把在你要使用复制功能的页面中引入Zero Clipboard的js文件:ZeroClipboard.js ...

    swf图形报表,有中文参数说明

    功能特性 animation 是否动画显示数据,默认为1(True) showNames 是否显示横向坐标轴(x轴)标签名称 ...link 链接(本窗口打开[Url],新窗口打开[n-Url],调用JS函数[JavaScript:函数]) name 横向坐标轴标签名称

    大名鼎鼎SWFUpload- Flash+JS 上传

    所有这些事件都可以在一个SWFUpload实体中被调用,这意味着在这些事件对应的函数中,你可以用 this 关键字来代替引用SWFUpload实体。  + fileDialogComplete (number of files selected)  - 触发条件  1. 用户...

    xheditor-1.1.14

    2. xhEditor进阶使用 ...说明:此函数可以在插件内部或者外部Javascript代码中进行调用 showModal:显示模式窗口 参数1:模式窗口的标题title 参数2:模式窗口的内容content 参数3:模式窗口的宽度w ...

    AppEmit.zip

    3) 在浏览器中调用第三方DLL、OCX组件以及系统winApi函数,tcc、python、lua等 4) 开发本地硬件DLL驱动模块的封装插件,实现在网页中操作控制本地的读卡器、打印机、扫描仪、高拍仪、U盾等各种硬件设备 5) 各个应用...

    网页FLASH播放器代码

    &lt;script language="JavaScript"&gt; var movie,timer,step,total,state=null,delay=100 function init(){//在 Flash 加载完成后初始化相关变量的函数 /*捕获 id 为 movie 的对象,若要兼容NS, 可用 window....

    asp.net知识库

    Oracle中PL/SQL单行函数和组函数详解 mssql+oracle Oracle编程的编码规范及命名规则 Oracle数据库字典介绍 0RACLE的字段类型 事务 CMT DEMO(容器管理事务演示) 事务隔离性的一些基础知识 在组件之间实现事务和异步...

    flex3的cookbook书籍完整版dpf(包含目录)

    20.4节在JavaScript中调用ActionScript方法函数 20.5节经由BrowserManager改变HTML页面标题 20.6节BrowserManager解析URL 20.7节经由BrowserManager深度-链接到数据 20.8节经由BrowserManager深度-链接容器 20.9节...

    java开源包1

    jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新...

    flash批量上传 php

    &lt;script language="JavaScript" type="text/javascript"&gt; 02.function challs_flash_update(){ //Flash 初始化函数 03.var a={}; 04.//定义变量为Object 类型 05. 06.a.FormName = "Filedata"; 07.//设置Form表单的...

    eagerflash幻灯片标签

    一、手动添加函数标签 1、把eAgerFlash.swf放在程序根目录下的/flash目录下。即地址为:程序目录/flash...二、或者把压缩包内的PE_Label.mdb文件解压至动易目录的temp中,然后进“后台-自定义标签管理-导入标签”即可。

Global site tag (gtag.js) - Google Analytics