無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

JavaScript関数の呼び出し

swfからJavaScriptの関数を呼び出すには「ExternalInterface」を使います。

サンプル(ExternalInterfaceSample.as):

package {

    import flash.display.*;
    import flash.external.*;

    /**
     * メインクラス
     */
    public class ExternalInterfaceSample extends Sprite  {

        public function ExternalInterfaceSample(){

            // javascript のAPIを実行し、戻り値を得る。
            var name:String = ExternalInterface.call( "getKittenName", 10 );
            trace(name);
        }

    }
}

swfを貼り付けるhtml:

<html>
<head></head>
<body>
  <div id="stdout"></div>

  <!-- swf -->
  <object id='externalInterfaceSampleSwf'
    classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'
    codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0'
    height='500' width='500'>
    <param name='src' value='ComplexDataTypeSender.swf'/>
    <param name='flashVars' value=''/>
    <embed name='externalInterfaceSampleSwf' src='ExternalInterfaceSample.swf'
        pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash'
        height='100%' width='100%' flashVars=''/>
  </object>
  <script>

var stdout = document.getElementById( "stdout" );

/**
 * 実行するjavascriptのAPI
 */
function getKittenName( age ) {
    stdout.innerHTML += "mii / " +  age;
    return "mii";
}

  </script>
</body>
</html>

ExternalInterfaceのstaticメソッドを実行するだけ。簡単です。

サンプルはこちら

配列やオブジェクトを渡す

引数や戻り値として配列やオブジェクトをやりとりすることもできます。


サンプル(ExternalInterfaceSample.as):

package {

    import flash.display.*;
    import flash.external.*;

    /**
     * メインクラス
     */
    public class ExternalInterfaceSample2 extends Sprite  {

        public function ExternalInterfaceSample2(){

            // javascript のAPIを実行し、戻り値を得る。
            var friends:Array = ExternalInterface.call(
                "getKittenFriends", [ {name:"mii", age:10} ] );
            for each ( var f:Object in friends ) {
                trace( f.name + " / " + f.age );
            }
        }

    }
}

swfを貼り付けるhtml:

<html>
<head></head>
<body>
  <div id="stdout"></div>

  <!-- swf -->
  <object id='externalInterfaceSampleSwf'
    classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'
    codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0'
    height='500' width='500'>
    <param name='src' value='ComplexDataTypeSender.swf'/>
    <param name='flashVars' value=''/>
    <embed name='externalInterfaceSampleSwf' src='ExternalInterfaceSample2.swf'
        pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash'
        height='100%' width='100%' flashVars=''/>
  </object>
  <script>

var stdout = document.getElementById( "stdout" );

/**
 * 実行するjavascriptのAPI
 */
function getKittenFriends( kittens ) {
    for ( var i = 0; i < kittens.length; i++ ) {
        stdout.innerHTML += kittens[i].name + " / " +  kittens[i].age;
    }
    return [
        { name:"kuro", age:1 },
        { name:"tora", age:2 },
        { name:"shiro", age:2 }
    ];
}
  </script>
</body>
</html>

サンプルはこちら


参考:Flex 2 開発 ガイド - ExternalInterface API を使用した Flex から JavaScript へのアクセス