问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

flash 调用外部JS函数

发布网友 发布时间:2022-05-12 05:07

我来回答

4个回答

热心网友 时间:2022-05-15 03:54

cs3里面的实现方法:
实现这个功能需要用到as里的externalinterface类
可以在as文档里找到
获取有关外部容器的信息

ExternalInterface.available 属性指示当前的 Flash Player 是否位于提供外部接口的容器中。如果外部接口可用,则此属性为 true;否则,为 false。在使用 ExternalInterface 类中的任何其它功能之前,应始终进行检查以确保当前容器支持外部接口通信,如下所示:

if (ExternalInterface.available)
{
// 在此执行 ExternalInterface 方法调用。
}

注意

ExternalInterface.available 属性报告当前容器是否为支持 ExternalInterface 连接的容器类型。它不会报告当前浏览器中是否启用了 JavaScript。

通过使用 ExternalInterface.objectID 属性,您可以确定 Flash Player 实例的唯一标识符(具体来说,是指 Internet Explorer 中 object 标签的 id 属性,或者是指使用 NPRuntime 接口的浏览器中 embed 标签的 name 属性)。这个唯一的 ID 代表浏览器中的当前 SWF 文档,并可用于对 SWF 文档进行引用,例如:在容器 HTML 页中调用 JavaScript 函数时进行引用。当 Flash Player 容器不是 Web 浏览器时,此属性为 null。

从 ActionScript 中调用外部代码

ExternalInterface.call() 方法执行容器应用程序中的代码。它至少需要一个参数,即包含容器应用程序中要调用函数的名称的字符串。传递给 ExternalInterface.call() 方法的其它任何参数均作为函数调用的参数传递给容器。

// 调用外部函数"addNumbers"
// 传递两个参数并将该函数的结果
// 赋给变量"result"
var param1:uint = 3;
var param2:uint = 7;
var result:uint = ExternalInterface.call("addNumbers", param1, param2);

如果容器为 HTML 页,此方法将调用具有指定名称的 JavaScript 函数,必须在包含 HTML 页中的 script 元素中定义该函数。JavaScript 函数的返回值被传递回 ActionScript。

<script language="JavaScript">
// 加上两个数字,然后将结果发送回 ActionScript
function addNumbers(num1, num2)
{
return (num1 + num2);
}
</script>

如果容器为其它的 ActiveX 容器,此方法将导致 Flash Player ActiveX 控件调度它的 FlashCall 事件。Flash Player 将指定的函数名及所有参数序列化为一个 XML 字符串。容器可以在事件对象的 request 属性中访问该信息,并用它来确定如何执行它自己的代码。为了将值返回 ActionScript,容器代码调用 ActiveX 对象的 SetReturnValue() 方法,并将结果(序列化为一个 XML 字符串)作为该方法的参数进行传递。有关该通信使用的 XML 格式的详细信息,请参阅外部 API 的 XML 格式。

无论容器为 Web 浏览器还是为其它 ActiveX 容器,只要调用失败或容器方法没有指定返回值,都将返回 null。如果包含环境属于调用代码无权访问的安全沙箱,ExternalInterface.call() 方法将引发 SecurityError 异常。可以通过在包含环境中为 allowScriptAccess 设置合适的值来解决此问题。例如,要在 HTML 页中更改 allowScriptAccess 的值,请编辑 object 和 embed 标签中的相应属性。

从容器中调用 ActionScript 代码

容器只能调用函数中的 ActionScript 代码,而不能调用任何其它 ActionScript 代码。要从容器应用程序调用 ActionScript 函数,必须执行两项操作:向 ExternalInterface 类注册函数,然后从容器的代码调用它。

首先,必须注册 ActionScript 函数,指示其应能够为容器所用。使用 ExternalInterface.addCallback() 方法,如下所示:

function callMe(name:String):String
{
return "busy signal";
}
ExternalInterface.addCallback("myFunction", callMe);

addCallback() 方法采用两个参数。第一个参数为 String 类型的函数名,容器将籍此名称得知要调用的函数。第二个参数为容器调用定义的函数名时要执行的实际 ActionScript 函数。由于这些名称是截然不同的,因此可以指定将由容器使用的函数名,即使实际的 ActionScript 函数具有不同的名称。这在函数名未知的情况下特别有用,例如:指定了匿名函数或需要在运行时确定要调用的函数。

一旦向 ExternalInterface 类注册了 ActionScript 函数,容器就可以实际调用该函数。完成该操作的具体方法依容器的类型而定。例如,在 Web 浏览器的 JavaScript 代码中,使用已注册的函数名调用 ActionScript 函数,就像它是 Flash Player 浏览器对象的方法(即,一个表示 object 或 embed 标签的 JavaScript 对象的方法)。也就是说,将传递参数并返回结果,就如同调用本地函数一样。

<script language="JavaScript">
// callResult gets the value "busy signal"
var callResult = flashObject.myFunction("my name");
</script>
...
<object id="flashObject"...>
...
<embed name="flashObject".../>
</object>

或者,在运行于台式机应用程序中的 SWF 文件中调用 ActionScript 函数时,必须将已注册的函数名及所有参数序列化为一个 XML 格式的字符串。然后,将该 XML 字符串作为一个参数来调用 ActiveX 控件的 CallFunction() 方法,以实际执行该调用。有关该通信使用的 XML 格式的详细信息,请参阅外部 API 的 XML 格式。

不管是哪种情况,ActionScript 函数的返回值都被传递回容器代码,当调用方为浏览器中的 JavaScript 代码时直接作为值返回,而当调用方为 ActiveX 容器时则会序列化为 XML 格式字符串。

热心网友 时间:2022-05-15 05:12

cs3里面的实现方法:
实现这个功能需要用到as里的externalinterface类
可以在as文档里找到
获取有关外部容器的信息

ExternalInterface.available 属性指示当前的 Flash Player 是否位于提供外部接口的容器中。如果外部接口可用,则此属性为 true;否则,为 false。在使用 ExternalInterface 类中的任何其它功能之前,应始终进行检查以确保当前容器支持外部接口通信,如下所示:

if (ExternalInterface.available)
{
// 在此执行 ExternalInterface 方法调用。
}

注意

ExternalInterface.available 属性报告当前容器是否为支持 ExternalInterface 连接的容器类型。它不会报告当前浏览器中是否启用了 JavaScript。

通过使用 ExternalInterface.objectID 属性,您可以确定 Flash Player 实例的唯一标识符(具体来说,是指 Internet Explorer 中 object 标签的 id 属性,或者是指使用 NPRuntime 接口的浏览器中 embed 标签的 name 属性)。这个唯一的 ID 代表浏览器中的当前 SWF 文档,并可用于对 SWF 文档进行引用,例如:在容器 HTML 页中调用 JavaScript 函数时进行引用。当 Flash Player 容器不是 Web 浏览器时,此属性为 null。

从 ActionScript 中调用外部代码

ExternalInterface.call() 方法执行容器应用程序中的代码。它至少需要一个参数,即包含容器应用程序中要调用函数的名称的字符串。传递给 ExternalInterface.call() 方法的其它任何参数均作为函数调用的参数传递给容器。

// 调用外部函数"addNumbers"
// 传递两个参数并将该函数的结果
// 赋给变量"result"
var param1:uint = 3;
var param2:uint = 7;
var result:uint = ExternalInterface.call("addNumbers", param1, param2);

如果容器为 HTML 页,此方法将调用具有指定名称的 JavaScript 函数,必须在包含 HTML 页中的 script 元素中定义该函数。JavaScript 函数的返回值被传递回 ActionScript。

// 加上两个数字,然后将结果发送回 ActionScript
function addNumbers(num1, num2)
{
return (num1 + num2);
}

如果容器为其它的 ActiveX 容器,此方法将导致 Flash Player ActiveX 控件调度它的 FlashCall 事件。Flash Player 将指定的函数名及所有参数序列化为一个 XML 字符串。容器可以在事件对象的 request 属性中访问该信息,并用它来确定如何执行它自己的代码。为了将值返回 ActionScript,容器代码调用 ActiveX 对象的 SetReturnValue() 方法,并将结果(序列化为一个 XML 字符串)作为该方法的参数进行传递。有关该通信使用的 XML 格式的详细信息,请参阅外部 API 的 XML 格式。

无论容器为 Web 浏览器还是为其它 ActiveX 容器,只要调用失败或容器方法没有指定返回值,都将返回 null。如果包含环境属于调用代码无权访问的安全沙箱,ExternalInterface.call() 方法将引发 SecurityError 异常。可以通过在包含环境中为 allowScriptAccess 设置合适的值来解决此问题。例如,要在 HTML 页中更改 allowScriptAccess 的值,请编辑 object 和 embed 标签中的相应属性。

从容器中调用 ActionScript 代码

容器只能调用函数中的 ActionScript 代码,而不能调用任何其它 ActionScript 代码。要从容器应用程序调用 ActionScript 函数,必须执行两项操作:向 ExternalInterface 类注册函数,然后从容器的代码调用它。

首先,必须注册 ActionScript 函数,指示其应能够为容器所用。使用 ExternalInterface.addCallback() 方法,如下所示:

function callMe(name:String):String
{
return "busy signal";
}
ExternalInterface.addCallback("myFunction", callMe);

addCallback() 方法采用两个参数。第一个参数为 String 类型的函数名,容器将籍此名称得知要调用的函数。第二个参数为容器调用定义的函数名时要执行的实际 ActionScript 函数。由于这些名称是截然不同的,因此可以指定将由容器使用的函数名,即使实际的 ActionScript 函数具有不同的名称。这在函数名未知的情况下特别有用,例如:指定了匿名函数或需要在运行时确定要调用的函数。

一旦向 ExternalInterface 类注册了 ActionScript 函数,容器就可以实际调用该函数。完成该操作的具体方法依容器的类型而定。例如,在 Web 浏览器的 JavaScript 代码中,使用已注册的函数名调用 ActionScript 函数,就像它是 Flash Player 浏览器对象的方法(即,一个表示 object 或 embed 标签的 JavaScript 对象的方法)。也就是说,将传递参数并返回结果,就如同调用本地函数一样。

// callResult gets the value "busy signal"
var callResult = flashObject.myFunction("my name");

或者,在运行于台式机应用程序中的 SWF 文件中调用 ActionScript 函数时,必须将已注册的函数名及所有参数序列化为一个 XML 格式的字符串。然后,将该 XML 字符串作为一个参数来调用 ActiveX 控件的 CallFunction() 方法,以实际执行该调用。有关该通信使用的 XML 格式的详细信息,请参阅外部 API 的 XML 格式。

不管是哪种情况,ActionScript 函数的返回值都被传递回容器代码,当调用方为浏览器中的 JavaScript 代码时直接作为值返回,而当调用方为 ActiveX 容器时则会序列化为 XML 格式字符串。

热心网友 时间:2022-05-15 06:47

看上去代码没什么问题,不过要注意Externalinterface
安全沙箱冲突问题,很多时候导致调用出错~~

热心网友 时间:2022-05-15 08:38

错了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
健康码没有变红,但时间显示阳变红了 贵州健康码登录不了怎么办 北京有哪些好吃的西餐厅推荐? 什么是 辰、戌、丑、未?它们代表了什么意思? 《辰戌丑未四墓库》详解 干货:"辰戌丑未"四墓库用法详解 吃四环素有哪些副作用 吃了四环素片对身体有害吗 盐酸四环素片的不良反应有哪些呢? 服用四环素的副作用 请教FLASH AS2.0函数调用的二个疑问 KTV客户经理的岗位职责 如何在flash cs6 中调用一个已经写好的javascript文件里面的函数 如何用vs2010编辑软件界面 Flash as2.0 中 怎么调用页面中javascript 中的函数 例如javascript 中的... KTV后勤主管主要是负责什么工作?急 人机界面用什么软件编辑? ktv楼面主管的岗位职责是什么? Flash编程三个function内的函数赋值怎么相互调用 四海云游是什么意思? 袋鼠为什么只会跳? 不含早是啥意思 一身毛,尾巴翘,不会走,只会跳,(打一动物) FLASH 函数 flash怎样执行影片剪辑中的函数?或者是执行影片剪辑中的按钮? KTV店长职责 服务员职责? 配电柜能存在什么安全隐患!还有高压变压器都能存在什么隐患,容易发生什么危险事故,发生的原因!谢谢 家用配电箱安全距离是多少? 电影《四海》中有哪些经典的台词? 一级配电箱周围的安全规定 Flash中function的用法问题 如何在flash调用js中的方法 flash 如何调用外部影片,传变量,调用函数? flashAS3.0 在一个函数中如何 调用另一个函数的变量 flash里用ac3怎么定义函数和调用函数 一个鸡蛋一身毛,只会跳来不会跑。(打一动物) 如何在FLASH中输入数学公式? 兔子为什么要跳不走? 如何通过FLASH里面的js函数来调用网页里的html函数,从而实现一个弹出窗口。 为什么兔子只会跳不会走??? 一身毛翘尾巴不会走只会跳打一动物 只跳不走见洞钻是什么动物? 2022年海南5月份计算机三级报名时间 谁知道麻雀为什么只会跳不会走? 为什么青蛙是跳不是走 急求答案!!!一个动物,不会飞,不会走,不会游泳,只会跳,有2条腿,长翅膀的,是什么动物??? 2022年春季消防安全公开课五大板块都是什么 2022年三月份日日消防安全直播讲了哪三关 兔子为什么只会跳? 2022安全教育日主题有哪些?