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 项目,请注意以上交互方法和安全注意事项。

posted @ 2024-12-06 06:14  王铁柱6  阅读(81)  评论(0)    收藏  举报