flash如何与js交互?
Flash 与 JavaScript 的交互主要通过 ExternalInterface API 实现。这个 API 允许 Flash 和 JavaScript 相互调用函数和传递数据。 虽然 Flash 现在已经基本被淘汰,但在一些老旧项目中可能仍然会遇到。
以下是 Flash 与 JavaScript 交互的两种主要方式:
1. Flash 调用 JavaScript:
在 ActionScript 3.0 中,使用 ExternalInterface.call()
方法调用 JavaScript 函数。
// ActionScript 3.0
import flash.external.ExternalInterface;
// 检查 JavaScript 是否可用
if (ExternalInterface.available) {
// 调用名为 "jsFunction" 的 JavaScript 函数,并传递两个参数
ExternalInterface.call("jsFunction", "parameter1", 123);
}
在 HTML 中,定义对应的 JavaScript 函数:
// JavaScript
function jsFunction(param1, param2) {
console.log("Flash called jsFunction with:", param1, param2);
// 在这里执行 JavaScript 代码,例如更新页面元素
document.getElementById("myDiv").innerHTML = param1 + " " + param2;
}
2. JavaScript 调用 Flash:
在 JavaScript 中,可以使用 Flash 对象的 GetVariable()
和 SetVariable()
方法(对于较老的 Flash 版本)或 call()
方法(对于 ActionScript 3.0)来调用 Flash 函数。
- 对于 ActionScript 3.0:
// JavaScript
// 获取 Flash 对象,"myFlashMovie" 是 Flash 对象的 ID
var flashMovie = document.getElementById("myFlashMovie");
// 调用 Flash 中名为 "asFunction" 的函数,并传递一个参数
if (flashMovie && flashMovie.call) { // 检查方法是否存在
flashMovie.call("asFunction", "parameterFromJS");
}
在 ActionScript 3.0 中,定义对应的 Flash 函数:
// ActionScript 3.0
public function asFunction(param:String):void {
trace("JavaScript called asFunction with: " + param);
// 在这里执行 ActionScript 代码
}
- 对于 ActionScript 2.0 (旧版本,不推荐): 需要在 Flash 中使用
ExternalInterface.addCallback()
注册可被 JavaScript 调用的函数。
// ActionScript 2.0
ExternalInterface.addCallback("asFunction", this, myASFunction);
function myASFunction(param:String):Void {
trace("JavaScript called myASFunction with: " + param);
}
然后在 JavaScript 中,可以使用:
// JavaScript
var flashMovie = document.getElementById("myFlashMovie");
flashMovie.asFunction("parameterFromJS"); // 直接调用已注册的函数
关键点:
ExternalInterface.available
: 在 ActionScript 中使用此属性检查 JavaScript 是否可用以及通信是否可能。- Flash 对象 ID: 确保正确获取 Flash 对象的 ID,以便 JavaScript 可以与之交互。
- 数据类型: 注意 Flash 和 JavaScript 之间传递的数据类型。 尽量使用基本数据类型(字符串、数字、布尔值)以避免出现问题。
- 安全性: ExternalInterface 有一些安全限制,尤其是在涉及跨域通信时。 确保 Flash 和 HTML 文件位于同一域中,或者正确配置跨域策略文件。
由于 Flash 已经被淘汰,建议尽量避免使用 Flash,并使用现代 Web 技术,例如 HTML5、Canvas、WebGL 和 JavaScript 来实现相同的功能。 如果必须维护旧的 Flash 项目,请注意以上交互方法和安全注意事项。