flash.external.ExternalInterfaceクラスを使用すると、HTML内のjavascriptとの通信を行うことが出来ます。
これにより、javascriptで取得できるイベントによりflash内でアクションを起こしたり、
その逆にflash内からjavascriptを介して、ブラウザの制御を行うことが可能になります。
以下サンプル(リンク)とソースです。
サンプルページ
ExternalInterfaceTest.zip
ソースの肝です。
---------- AS側 ----------
//javascriptから呼び出す関数の登録
if (ExternalInterface.available) {
//ExternalInterface.marshallExceptions = true;
ExternalInterface.addCallback("TestFunc_AS", receivedFromJavaScript);
}else {
text1.appendText("External interface is not available for this container.");
}
//javascriptの呼び出し
if (ExternalInterface.available) {
try {
ExternalInterface.call("TestFunc_JS", text2.text);
} catch (error:SecurityError) {
text1.appendText("A SecurityError occurred: " + error.message + "\n");
} catch (error:Error) {
text1.appendText("An Error occurred: " + error.message + "\n");
}
}
---------- HTML側 ----------
function TestFunc_JS(value){
document.forms["form1"].output.value += "ActionScript says: " + value + "\n";
}
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName];
} else {
return document[movieName];
}
}
function sendToActionScript(value) {
thisMovie("ExternalInterfaceTest").TestFunc_AS(value);
}
まず、availableプロパティでhtml内に埋め込まれたswfであるかどうかをチェックしています。
ちなみにswf単体で動かした場合には、この値がfalseになります。
javascriptからasを呼び出せるようにするには、addCallback関数にて、
javascriptからの呼び出しを許可する関数を登録します。
後は、HTML側からswfを取得し、(swf).登録関数名で呼び出せます。
逆にasからjavascriptを呼び出す際の設定は入りません。
asからjavascriptを呼び出す際にはcall関数を使用します。
第一引数が関数名、第二引数以降に関数に渡すパラメータを指定します。
ちなみにas側でmarshallExceptionsオプションをtrueにすると、例外をキャッチできるようになります。javascript例外をflash内で、flash内の例外をjavascriptでキャッチ可能です。
(flashplayer ver 9.0.115 以降)
これにより、javascriptで取得できるイベントによりflash内でアクションを起こしたり、
その逆にflash内からjavascriptを介して、ブラウザの制御を行うことが可能になります。
以下サンプル(リンク)とソースです。
サンプルページ
ExternalInterfaceTest.zip
ソースの肝です。
---------- AS側 ----------
//javascriptから呼び出す関数の登録
if (ExternalInterface.available) {
//ExternalInterface.marshallExceptions = true;
ExternalInterface.addCallback("TestFunc_AS", receivedFromJavaScript);
}else {
text1.appendText("External interface is not available for this container.");
}
//javascriptの呼び出し
if (ExternalInterface.available) {
try {
ExternalInterface.call("TestFunc_JS", text2.text);
} catch (error:SecurityError) {
text1.appendText("A SecurityError occurred: " + error.message + "\n");
} catch (error:Error) {
text1.appendText("An Error occurred: " + error.message + "\n");
}
}
---------- HTML側 ----------
function TestFunc_JS(value){
document.forms["form1"].output.value += "ActionScript says: " + value + "\n";
}
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName];
} else {
return document[movieName];
}
}
function sendToActionScript(value) {
thisMovie("ExternalInterfaceTest").TestFunc_AS(value);
}
まず、availableプロパティでhtml内に埋め込まれたswfであるかどうかをチェックしています。
ちなみにswf単体で動かした場合には、この値がfalseになります。
javascriptからasを呼び出せるようにするには、addCallback関数にて、
javascriptからの呼び出しを許可する関数を登録します。
後は、HTML側からswfを取得し、(swf).登録関数名で呼び出せます。
逆にasからjavascriptを呼び出す際の設定は入りません。
asからjavascriptを呼び出す際にはcall関数を使用します。
第一引数が関数名、第二引数以降に関数に渡すパラメータを指定します。
ちなみにas側でmarshallExceptionsオプションをtrueにすると、例外をキャッチできるようになります。javascript例外をflash内で、flash内の例外をjavascriptでキャッチ可能です。
(flashplayer ver 9.0.115 以降)






コメントする