示例: 浏览器 JavaScript 通信

此示例将介绍 AS3 代码如何与浏览器中的 JavaScript 通信。 我们以 ExternalInterface ActionScript 类为例。

运行上述类时,BrowserCommunicator.TestCommunication() 函数将注册回调函数,以便浏览器 JavaScript 稍后调用此回调函数。 ActionScript 稍后将调用浏览器 JavaScript,这将弹出警报窗口。 然后,JavaScript 将调用突出显示的 ActionScript 函数,从而完成双向通信试验。


所需的 JavaScript

以下 JavaScript 需要添加至 Unity 发布 SWF 的 html 页面。 这将创建从 ActionScript 中调用的函数:

JavaScript

<script type="text/javascript">

function calledFromActionScript()
{
    alert("ActionScript called Javascript function")

    var obj = swfobject.getObjectById("unityPlayer");
    if (obj)
    {
        obj.callFromJavascript();
    }
}

</script> 


BrowserCommunicator.as(和匹配 C# 类)

ActionScript 3

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# 虚拟实现:

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