分享
 
 
 

Flash8与&#106avascript集成

王朝html/css/js·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

本文部分内容来自emllab,在后部分,加入了本人的一个整合范例。

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

Flash8的出现,这件事就变的比较容易了。

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="getID(’external2’);">

注意,当我们设函数给onload事件,我们传递给它swf的id.它可以在swf的嵌入位置找到,现在,当页初始化完成后,函数getID将被调用,变量me就会被设置,以使javascript可以调用flash函数。

将文件上传到服务器上,并进行测试,当你点击按钮并在提示中输入色彩值,flash中的方块色就会改变。如下。

演示文件

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

最终源文件下载

source.rar

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

范例演示

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有