このサンプルで Action Script 3 コードによりブラウザのJavaScriptと通信する方法を示します。このサンプルはActionScriptクラスの ExternalInterface を活用します。
実行されたとき,BrowserCommunicator.TestCommunication() 関数はコールバックを登録しその後にブラウザJavaScriptがコール出来ます。次にActionScriptはブラウザJavaScriptをコールして警告ポップアップが表示されます。公開されたActionScript関数は,JavaScriptにより実行され二方向のコミュニケーションテストとして完了です。
次のJavaScriptをHTMLページに追加してUnityによりパブリッシュされたSWFを供給します。これが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 SandboxについてはAdobeの documentation を参照して下さい。