Curl6.0からAjax相互運用性という機能が追加されました。これはJavascriptからCurlのメソッドをコールしたり、またはその逆でCurlからJavascriptの関数をコールすることができます。この機能を用いれば、GoogleMapのAPIをコールしてGoogleMapと組み合わせたアプリケーションなどを作成することができます。この機能をサンプルコードを元に説明していきます。
JavascriptからCurlのメソッドをコールする
Javascriptから、sharp.curlというCurlアプレットの中にあるMySharpクラスのchange-colorメソッドを実行するという例を紹介していきます。
まずは、Curl側のサンプルコード(sharp.curl)から説明していきます。以下のサンプルは、単純にRectangleSharpクラスを継承して四角形の図を表示するMySharpクラスを作っています。そのMySharpクラスの中に色を変更するchange-colorメソッドを作成し、このメソッドを後述するJavascriptから呼び出すこととします。
また、このオブジェクトを生成した後、Javascriptから実行可能なオブジェクトとして登録するために、自アプレットのハンドラとして登録する必要があります。これにはregister-applet-invoke-handlerメソッドを利用します。この行が存在しませんとJavascriptから実行することはできません。
{curl 6.0 applet} {import * from CURL.GUI.SHAPES} {define-class MyShape |
次にHTML側を説明します。まずは、CurlのアプレットをHTML内に埋め込む場合は、objectタグを利用します。objectタグをサポートしていないブラウザの場合は、embedを利用します。
<object id=”shape” type=”text/vnd.curl” data=”sharp.curl” height=”200″ width=”200″> </object> |
このJavascriptオブジェクトのapplet_invoke関数を使って先ほど登録したCurlオブジェクトのメソッドを呼びます。
var shape = document.getElementById(“shape“); shape.applet_invoke(“change-color”, color); |
また、その他に用意されているJavascriptオブジェクトの関数・フィールドとして、Curlアプレットの呼び出し準備が整っているか否かをチェックするためのapplet_invoke_readyフィールドと、アプレットの呼び出し準備が整った際に実行されるapplet_invoke_ready_callback関数があります。具体的な使い方を見せるためにすべてのコードを以下に載せておきます。
<html><head><title>Javascript sample</title> <script type=”text/javascript”> // change color function onLoad() </script></head> <p> </p></body></html> |
CurlからJavascript関数をコールする
CurlからJavascriptの関数を呼び出す場合、AppletDataクラスのapplet-invoke-asyncメソッドを実行します。以下に呼び出し方のサンプルコードを載せておきます。
let ad:AppletData = {AppletData …} {ad.applet-invoke-async finish-proc = {proc {ex:#Exception, result:any}:void || 終了処理 }, “change-color”, || 呼び出すjavascriptの関数 “green” || 呼び出すJavascriptの関数の引数 } |
関連サンプル
GoogleMapと組み合わせたサンプルはCurlをインストールすると、以下のディレクトリに提供されます。(等サンプルはLinuxやMAC版も同様にも含まれています。)
C:\Program Files\Curl Corporation\Surge\7\docs\default\examples\dguide\subapplets.zip