Actionscript3

ExternalInterface.callの使い方を記録

[`evernote` not found]
LINEで送る
Pocket

Actionscript2でも使える、ExternalInterfaceはjavascriptとActionscriptの通信に使うことが多いと思いますが、
また久しぶりにExternalInterfaceを使う機会があったので、記録しておきます。

まず、ExternalInterfaceのメソッドとしては、
addCallBack、callがあるのですが、僕は単純に

呼び出す側 -> 呼び出される側
swf (actionscript) -> js (javascript) : ExternalInterface.call();
js (javascript) -> swf (actionscript):ExternalInterface.addCallBack();

と覚えています。

で、その中でも今日は、ExternalInterface.call()の記録です。

ExternalInterface.call( “呼び出したいjsの関数名” [jsの関数に持たせたい引数,,,,,] );

という風に使います。

例えば、swf内にある、aryという配列をjsのalertArrayという関数に渡すとしましょう。

swfではActionscriptをこんな風に書いておきます。

注:下にあるサンプルには、全角スペースが含まれていますので、実際に使う時は全角スペースを削除して下さい。

swf ————————————————–

import flash.external.ExternalInterface;  //
import flash.events.SecurityError;  //エラーに対処するため

var ary:Array = [“これはエラー”, “番号:2”]:

if( ExternalInterface.available){ //一応ExternalInterfaceが使えるかを確認
 try{
  ExternalInterface.call( “alertArray”, ary );
 }
 catch(e:SecurityError){
  /*
   セキュリティエラーは、許可されていないところへ接続しようとした場合などに起こります。
   例:crossdomain.xmlが存在しない外部ドメインへURLLoaderなどで接続しようとした、など
  */
  //セキュリティエラーの場合の処理(エラーメッセージを出力するとか)
  
 }
 catch(e:Error){
  //それ以外のエラーが起きた場合(同じくエラーメッセージを出力するとか)
  
 }
}

try、catchでくくっておかないと、実行時にエラーが出たり、強制終了しないといけなくなったりするので注意っす!

js(というかHTML内)———————————–

<html xmlns=”http://www.w3.org/1999/xhtml”; xml:lang=”ja” lang=”ja”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=shift_jis” />
<title>so</title>
<script language=”javascript”>AC_FL_RunContent = 0;</script>
<script src=”AC_RunActiveContent.js” language=”javascript”></script>
<script type=”text/javascript”>

//この関数をswfから呼び出します
function alertArray(ary){
alert( ary[0] + ” : ” + ary[1] );
}

</script>
</head>
<body bgcolor=”#ffffff”>
<script language=”javascript”>

if (AC_FL_RunContent == 0) {
alert(“このページでは \”AC_RunActiveContent.js\” が必要です。”);
} else {
AC_FL_RunContent(
‘codebase’, ‘http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0′;,
‘width’, ‘550’,
‘height’, ‘400’,
‘src’, ‘so’,
‘quality’, ‘high’,
‘pluginspage’, ‘http://www.macromedia.com/go/getflashplayer’;,
‘align’, ‘middle’,
‘play’, ‘true’,
‘loop’, ‘true’,
‘scale’, ‘showall’,
‘wmode’, ‘window’,
‘devicefont’, ‘false’,
‘id’, ‘so’,
‘bgcolor’, ‘#ffffff’,
‘name’, ‘so’,
‘menu’, ‘true’,
‘allowFullScreen’, ‘false’,
‘allowScriptAccess’,’sameDomain’,
‘movie’, ‘so’,
‘salign’, ”
); //end AC code
}
</script>
<noscript>
<object classid=”clsid:d27cdb6e-ae6d-11cf-96b8-444553540000″ codebase=”http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0″; width=”550″ height=”400″ id=”so” align=”middle”>
<param name=”allowScriptAccess” value=”sameDomain” />
<param name=”allowFullScreen” value=”false” />
<param name=”movie” value=”so.swf” /><param name=”quality” value=”high” /><param name=”bgcolor” value=”#ffffff” /> <embed src=”so.swf” quality=”high” bgcolor=”#ffffff” width=”550″ height=”400″ name=”so” align=”middle” allowScriptAccess=”sameDomain” allowFullScreen=”false” type=”application/x-shockwave-flash” pluginspage=”http://www.macromedia.com/go/getflashplayer”; />
</object>
</noscript>
</body>
</html>

—-
とすると、このhtmlを開いたときに、
『これはエラー : 番号:2』
という文字が入ったアラートボックスが表示されるはず。

もしトラブルなどがあった場合は、
・本当にそのswf、jsは読み込まれてから実行されているか、などを確認すればいいかと思います。
あとは、僕がタイプミスしていないか、など。。。。

2007年9月18日22:22

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA