JS与AS双向调用实现

JS 和 AS 的双向调用,在老项目里还挺常见的,尤其是 Flash 还在服役的那些年。你要是手上还有老系统要维护,或者在做和 Flash 打交道的项目,那这个资源真能帮上忙。它不光讲了怎么用 ExternalInterface 做通信,还细讲了怎么从 JS 传参给 AS、怎么让 AS 回调 JS,代码示例也比较清晰。

JS 调 AS,主要靠ExternalInterface.addCallback。你在 AS 里注册一个方法,JS 那边就能像本地函数一样直接调用。响应也快,代码也简单:

import flash.external.ExternalInterface;
ExternalInterface.addCallback("callFromJS", function(param: String): String {
  return "Called from AS with " + param;
});

JS 里就直接上:

var flashObj = document.getElementById('yourFlashObject');
console.log(flashObj.callFromJS('Hello'));

反过来,AS 调 JS 就用ExternalInterface.call。这个函数必须在 JS 全局作用域下才能被 AS 成功调用,不然 AS 找不到它:

function functionInJS(message) {
  console.log('Called from AS: ' + message);
  return 'Response from JS';
}
var result:String = ExternalInterface.call("functionInJS", "Hello AS");
trace(result);

除了调用方式,FlashVars这种初始化参数的传递方式也蛮实用,适合传静态配置。JS 可以设置,AS 可以直接取。

但说实话,现在用 AS 的场景不多了。Flash 也不被浏览器支持了。不过如果你在维护旧项目,这种技术储备还是挺有价值的。要注意安全策略、浏览器兼容性,还有异步调用的坑,是在数据来回频繁的场景里。

如果你正在搞 Flash 内容迁移,或者要调试老 Flash 页面,这篇文章也可以搭配调试插件核心库解析一起看,会更顺手。

zip 文件大小:84.69KB