此示例将介绍 AS3 代码如何与浏览器中的 JavaScript 通信。 我们以 ExternalInterface ActionScript 类为例。
运行上述类时,BrowserCommunicator.TestCommunication() 函数将注册回调函数,以便浏览器 JavaScript 稍后调用此回调函数。 ActionScript 稍后将调用浏览器 JavaScript,这将弹出警报窗口。 然后,JavaScript 将调用突出显示的 ActionScript 函数,从而完成双向通信试验。
以下 JavaScript 需要添加至 Unity 发布 SWF 的 html 页面。 这将创建从 ActionScript 中调用的函数:
<script type="text/javascript"> function calledFromActionScript() { alert("ActionScript called Javascript function") var obj = swfobject.getObjectById("unityPlayer"); if (obj) { obj.callFromJavascript(); } } </script>
package { import flash.external.ExternalInterface; import flash.system.Security; public class BrowserCommunicator { //Exposed so that it can be called from the browser JavaScript. public static function callFromJavascript() : void { trace("Javascript successfully called ActionScript function."); } //Sets up an ExternalInterface callback and calls a Javascript function. public static function TestCommunication() : void { if (ExternalInterface.available) { try { ExternalInterface.addCallback("callFromJavascript", callFromJavascript); } catch (error:SecurityError) { trace("A SecurityError occurred: " + error.message); } catch (error:Error) { trace("An Error occurred: " + error.message); } ExternalInterface.call('calledFromActionScript'); } else { trace("External interface not available"); } } } }
类的 C# 虚拟实现:
[NotConverted] [NotRenamed] public class BrowserCommunicator { [NotRenamed] public static void TestCommunication() { } }
只需调用 BrowserCommunicator.TestCommunication() 即可调用双向通信试验。
A SecurityError occurred: Error #2060: Security sandbox violation
发布的 SWF 无权访问 html 文件时将出现上述错误。 要在本地解决此问题,您可以:
有关 Flash 安全沙箱 (Security Sandboxes) 的更多信息,请参阅 Adobe 文档。
Page last updated: 2013-06-25