| Flex 2 開発ガイド > Flex プログラミングに関するトピック > ラッパーとの通信 > JavaScript からの Flex へのアクセス | |||
ExternalInterface API を使用すると、ラッパーから Flex メソッドを呼び出すことができます。そのためには、Flex アプリケーションのパブリックメソッドを、呼び出し可能なメソッドのリストに追加します。Flex アプリケーションでは、ExternalInterface API の addCallback() メソッドを使用してローカル Flex 関数をリストに追加します。このメソッドにより、ActionScript メソッドは、ラッパーの JavaScript または VBScript から呼び出し可能なメソッドとして登録されます。
|
メモ |
|
この機能を使用するには、クライアントで特定のブラウザが実行されている必要があります。詳細については、ExternalInterface API についてを参照してください。 |
addCallback() メソッドのシグネチャを次に示します。
addCallback(function_name:String,closure:Function):void
function_name パラメータは、HTML ページのスクリプトから Flex 関数を呼び出すときに使用する名前です。closure パラメータは、呼び出す関数のローカル名です。このパラメータには、アプリケーションのメソッド、またはオブジェクトインスタンスを指定できます。
次の例では、ラッパーで呼び出し可能にする myFunc() 関数を宣言します。
<?xml version="1.0"?>
<!-- wrapper/AddCallbackExample.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp()">
<mx:Script>
import flash.external.*;
public function initApp():void {
ExternalInterface.addCallback("myFlexFunction",myFunc);
}
public function myFunc(s:String):void {
l1.text = s;
}
</mx:Script>
<mx:Label id="l1"/>
</mx:Application>
Flex 関数を HTML ページから呼び出すには、ムービーオブジェクトへの参照を取得します。この値は、<object> および <embed> タグの id および name プロパティと同じ値です。この場合は mySwf です。次に、必要なパラメータをすべて渡して、そのオブジェクトでメソッドを呼び出します。次に例を示します。
<html><head>
<title>wrapper/AddCallbackWrapper.html</title>
</head>
<body scroll='no'>
<SCRIPT LANGUAGE="JavaScript">
function callApp() {
window.document.title = document.getElementById("newTitle").value;
mySwf.myFlexFunction(window.document.title);
}
</SCRIPT>
<h1>AddCallback Wrapper</h1>
<form id="f1">
Enter a new title: <input type="text" size="30" id="newTitle" onchange="callApp()">
</form>
<table width='100%' height='100%' cellspacing='0' cellpadding='0'>
<tr>
<td valign='top'>
<object id='mySwf' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' height='200' width='400'>
<param name='src' value='AddCallbackExample.swf'/>
<param name='flashVars' value=''/>
<embed name='mySwf' src='AddCallbackExample.swf' pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' height='100%' width='100%' flashVars=''/>
</object>
</td>
</tr>
</table>
</body></html>
Flex データサービスによって生成されるラッパー内の id および name プロパティのデフォルト値は、<MXML ファイル名>.mxml.swf です。HTML ページのスクリプト内で Flex アプリケーションにアクセスするために使用する名前には、ピリオドを含めることができないので、ラッパーではデフォルト値を変更する必要があります。詳細については、Flex アプリケーションの id プロパティと name プロパティの編集を参照してください。
ユーザーが Flex アプリケーションを要求する際に使用するブラウザが不明な場合は、ラッパーのスクリプトをブラウザに依存しないようにする必要があります。詳細については、複数のブラウザタイプの操作を参照してください。
Flex アプリケーションに適切な名前の付いた関数がない場合、またはその関数が呼び出し可能になっていない場合、ブラウザは JavaScript エラーをスローします。
Flex と Flash Player には、強力なセキュリティ機能が内蔵されており、サイト間のスクリプティングを防ぐことができます。デフォルトでは、Flex 関数を HTML スクリプトから呼び出すことはできません。関数を呼び出し可能として明示的に指定する必要があります。また、HTML ページがアプリケーションとして同じドメインにない場合、Flex 関数を HTML ページから呼び出すことはできません。ただし、Flex 関数の呼び出し元のソースを展開することは可能です。詳細については、addCallback() メソッドについてを参照してください。
Flex 2.01