当Flash置于HTML容器中时,经常会遇到AS与JS的通信问题,例如:JS能否调用AS中的变量、方法,AS能否调用JS中的变量、方法等等。答案是肯定的。随着技术的不断发展,解决方案也是多种多样的。
在我总结的HTML与FLASH之间的“静态”传值一文中提到了JS使用SetVariable方法来设置FLASH中的变量,kinglong认为此法已经过时。对此我表示同意,但上文重点毕竟不是在讨论JS与AS的通信,因此另外对AS与JS通信做一个个人总结,欢迎大家讨论。
实现JS跟AS的通信,目前可选方法比较多,但早期的方法在使用便捷和功能上都不是很完美,下面做一简要说明:
一、getURL getURL("javascript:history.go(-1)");
通过URL协议来访问页面中的javascript,上面控制浏览器历史的代码很眼熟吧,诸如此类我们平时在定制页面收藏,发送邮件时都会经常使用这种方式。虽然你也可以调用页面中自己定义的JS函数,但我个人认为局限性还是比较大,函数的参数传递并不是很灵活,无返回值,而且只能实现AS调用JS,反之不行。
二、fscommand命令
使用fscommand来调用AS定义的方法也是一个很常用的方式,但我们需要在HTML页面中定义一个具有规定格式的myFlash_DoFSCommand函数,首先定义这个函数我个人就觉得麻烦,而且也只能实现AS调用JS,无函数返回值。
三、SetVariable
上面两种方法都只能实现AS调用JS,而SetVariable恰恰相反,只要我们稍微做下处理,他就可以帮我们变相调用AS中的方法。大概思路如下:AS中设置一个状态变量,并使用Object的watch方法对其监视,JS通过SetVariable来修改这个状态变量,一旦侦测到了变量的改变,那就可以根据不同的状态值来选择执行AS中的相应函数了。如果需要考虑用户的低版本播放器,那么你可以考虑下该方法,个人认为还是比较灵活的。
可以看出上面的这些做法都有一定的局限性,所以在我们的应用中很多时候都不得不将他们结合使用。而下面我要具体介绍的就是 ExternalInterface的做法,通过它你能轻松实现AS与JS的双向方法调用,从而也解决了双向的变量访问,详细介绍可参见FLASH帮助文档和Adobe的官方教程,下面用两个简单例子来说明ExternalInterface的使用。
一、AS调用JS的方法(实例演示)
Flash中代码:
//导入包
import flash.external.*;
get_btn.onRelease = function(){
//调用页面中的JS函数
var temp_str = String(ExternalInterface.call("say", "Hello,World"));
result_txt.text = temp_str;
}
Html中代码:function say(txt){
return txt;
}
没错,就这么简单,JS函数定义没有任何要求,AS中使用call方法直接调用就可以了。
二、JS调用AS的方法(实例演示)
FLASH中代码://导入包
import flash.external.*;
//提供JS访问的函数名
var _method:String = "say";
//指定本地函数中this变量的作用域,可设置为null留空
var e_area:Object = null;
//AS内部函数名
var method:Function = say;
//将函数注册到容器列表
var wasSuccessful:Boolean = ExternalInterface.addCallback(_method, e_area, method);
//查看注册是否成功
if(wasSuccessful){
result_txt.text = "函数注册成功";
}
//本地的函数
function say(txt:String) {
result_txt.text = txt;
}
Html中代码:<div>
<form>
<input type="button" onclick="callExternalInterface()" value="JS调用AS方法" />
</form>
<script>
function callExternalInterface() {
thisMovie("demo").say("Hello,World");
}
//浏览器兼容访问DOM
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName]
}
else {
return document[movieName]
}
}
</script>
</div>
其中红色代码是核心代码,其作用原理是AS端通过addCallback函数把AS内部定义的方法注册为可从容器中调用,允许自定义另外一个方法名供 JS来调用这个方法,函数调用成功返回true,失败返回flase,在此例中通过wasSuccessful变量来判断函数是否注册成功。函数注册成功以后,JS可以通过DOM来访问SWF对象,然后直接调用预定义的方法即可。
通过比较可以看出,使用ExternalInterface来完成AS和JS的通信,代码可以更简洁,更清晰,功能也更强大,不过还有些细节你需要了解,需要使用8.0以上的播放器,对于调用的JS函数不能使用递归,同时安全域限制也必须在考虑之中。
文章出处:http://www.elong8.net/blog/trackback.asp?tbID=425&action=addtb&tbKey=9522c5eb9e87173e9c6540d21d3ef7350ca37b08
分享到:
相关推荐
本案例“Flash与JS交互案例”展示了如何在网页中使SWF(Flash影片)与JavaScript进行数据交换,从而实现更丰富的用户体验。 首先,让我们了解Flash中的`ExternalInterface` API。这是Adobe Flash Player提供的一种...
在网页开发中,Flash与JavaScript(JS)的交互是一个常见的需求,特别是在富互联网应用程序(RIA)的场景下。这两种技术的交互使得动态内容和用户互动得以实现,弥补了彼此的不足。本文主要探讨如何实现Flash...
JavaScript 可以通过这些对象的属性和方法与 Flash 进行交互,如 `getVariable` 和 `setVariable` 方法。 3. **Flash 发布设置**: 为了使 Flash 能够与 JavaScript 通信,需要在 Flash 的发布设置中启用 "Allow ...
本实例将详细讲解如何通过Flash与ASP进行交互,以实现更丰富的网页功能。 首先,ASP是一种服务器端脚本语言,由微软开发,用于构建动态网页。它允许开发者在HTML页面中嵌入VBScript或JScript代码,从而在服务器端...
在IT领域,Flash和C#的交互是一种常见的技术实践,特别是在构建富...总之,Flash与C#的交互技术是多样的,开发者可以根据项目需求选择合适的方法。理解这些技术原理和实践技巧,有助于提升RIA的用户体验和功能实现。
"js.rar_actionscript_flash js_js actionscript_js flash_js交互"这个标题揭示了我们要探讨的主题——如何实现JavaScript与Flash ActionScript之间的交互。 ActionScript是Adobe Flash Professional中的主要编程...
本文将通过一个小例子深入讲解如何实现JS与Flash之间的交互,帮助开发者更好地理解和应用这两种技术。 首先,我们要了解JS和Flash的基本概念。JavaScript是一种轻量级的脚本语言,常用于网页的动态效果和用户交互,...
与asp js交互数据实现 ------------------------------ import fl.controls.Button; import fl.core.UIComponent; var TF : TextFormat = new TextFormat(); TF.size = 16; TF.color = 0x0000ff; key.setStyle(...
3. **Flash与JavaScript交互**: 虽然Qt是C++库,但Flash内容主要通过JavaScript与宿主环境(在这种情况下是Qt)进行交互。在Flash中,可以使用ActionScript的ExternalInterface类来暴露方法供JavaScript调用。同样,...
在Flash与Java交互的过程中,核心机制是通过Flash Player提供的`ExternalInterface`类实现ActionScript方法与容器(例如网页浏览器)中的JavaScript或ActiveX代码之间的调用。这使得开发人员能够在Flash应用程序内部...
7. **安全与限制**:由于Flash Player的安全策略,只有在同源策略允许的情况下,Flash才能与JavaScript交互。此外,外部接口的使用也受到一些其他限制,比如不能访问本地文件系统,除非用户明确授权。 8. **学习...
在Flash中,我们可以使用ExternalInterface API来实现与JavaScript的交互,从而间接地与C#后台通信。在B/S场景下,JavaScript可以调用Web服务或PageMethods,C#端处理后返回结果,JavaScript再将这些结果传递给Flash...
3. **外部接口(External Interface)**:Flash Player 8及更高版本提供了外部接口功能,允许Flash与宿主环境(如VB)进行JavaScript级别的通信。在VB中,可以通过WebBrowser控件或自定义的ActiveX组件来接收和发送...
3、使用Flash中的ExternalInterface.call方法和fscommand方法对JS进行调用与传送数据。 4、使用Flash中的ExternalInterface.addCallback方法创建接口,使JS能够调用AS中的函数。 包含swfobject.js与fla源文件。 (*...
3. **配置Flash的外部接口**:在Flash项目中,使用ActionScript 3.0编写代码,通过`ExternalInterface.addCallback()`方法注册需要与C#交互的函数。例如: ```actionscript if (ExternalInterface.available) { ...
在Flex与JavaScript交互时,通常有以下几个核心概念: 1. **ExternalInterface**: 这是Flex提供的一种API,允许ActionScript代码调用JavaScript函数,同时也允许JavaScript调用Flex组件的方法。在使用...
同时,Flash也可以通过ACTIONSCRIPT与MFC程序进行通信,比如通过ExternalInterface接口暴露函数给JavaScript,再由JavaScript调用MFC程序暴露的ActiveX接口。 在实际应用中,可能需要处理的问题包括: 1. 初始化和...
Flex与JavaScript交互是Web开发中的一个重要技术,它允许在Adobe Flash Player或Adobe AIR环境中运行的Flex应用程序与HTML页面中的JavaScript代码进行通信。这种交互性极大地扩展了富互联网应用(RIA)的功能,使得...
例如,现在的WebGL和WebAssembly技术在某种程度上就是对Flash与C++交互概念的继承和发展,它们允许JavaScript与原生代码(如C++)交互,以提高Web应用的性能。 至于压缩包内的“视图内.txt”和“Article_src”,...
最后,"js"可能是指JavaScript文件,它可能被用来与Flash内容进行交互,例如处理用户输入、实现页面与Flash之间的数据交换,或者在现代浏览器不支持Flash时提供备选的JavaScript实现。 总结来说,3D Flash交互效果...