OpenLaszloと外部の連携2

まずFlashへデータを送信する方法を考えます。そのためにまずOpenLaszloでvalという属性をCanvasに定義して以下の二つのタイミングでDebugにログを出力するようにします。
1.onidleイベント
2.onvalイベント
それからボタンをつけていつでもvalの内容を確認できるようにしました。

<?xml version="1.0" encoding="UTF-8"?>
<canvas width="500" height="250" debug="true">
    <simplelayout spacing="10" axis="y" />
    <button>check val
        <handler name="onclick">
            Debug.write("check:"+val);
        </handler>
    </button>

    <attribute name="val" />
    <attribute name="preval" type="text" value="" />

    <handler name="onval">
        Debug.write("onvalイベント:"+val);
    </handler>

    <method name="onidle" event="onidle" reference="LzIdle">
        if(val!=preval)
        {
            Debug.write("onidleイベント:"+val);
            preval=val;
        }
    </method>
</canvas>

このFlashを使ってデータが送信を確認します。Flashへデータを送る方法は、Flashを読み込む時に送る方法が二つ、読み込んだ後で送る方法一つあります。

読み込む時に送る一つ目の方法はQueryを使う方法です。

http://www.asahi-net.or.jp/~ya5m-kwbr/hash4/useQuerry.html

途中に出てくる次のようなタグはFlashを埋め込むためにswfobject.jsが出力するタグです。IEだと以下のようなタグが生成されると思います。

<object id="lzapp" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="500" height="150">
<param name="movie" value="hash.lzx.swf?val=a" />
...
</object>
<param name="movie" value="hash.lzx.swf?val=a" />

のところでval=aとなっていますが、このQuerryを設定することでFlashへデータが渡されます。ここで渡す変数はcanvasの子です。

Flashが読み込まれると、デバッグウィンドウには「onidleイベント:a」と表示されます。これでonidleイベントからvalの値が変更されたのが確認できます。ただ、onvalイベントは反応してくれませんね。

それから、この方法だと読み込まれるFlashのURLが渡すデータごとに代わりますのでブラウザのキャッシュが有効に働かない場合があります。

読み込んだ後にFlashへデータを送る方法ってのが最後についているボタンでやってる方法で、Flashオブジェクトに対してSetVariableを呼んであげます。ボタンを押すと

<input type="button" onclick="document.getElementById('lzapp').SetVariable('val','c')">

のとおりvalにcが設定されて「onidleイベント:c」と表示されます。