ActionScript 3 での色々な文字列の扱い方

ActionScript 内で JavaScript を操作する時には ExternalInterface を使いますが、複雑なことをする時にはどうしても以下のような感じになります。

ActionScript
ExternalInterface.call(
    "function ()" +
    "{" +
        "var temp = 'test';" +
        "temp += 'string';" +
        "alert(temp);" +
    "}"
);

これだと文字列の連結が多すぎで分かりにくくなってしまうんですが、ActionScript は CDATA セクションを文字列として扱うためこんなやり方もあります。

ActionScript
ExternalInterface.call(<![CDATA[
    function ()
    {
        var temp = "test";
        temp += "string";
        alert(temp);
    }
]]>);

9 Comments

  1. taka:nium より:

    これは便利ですね!
    あとでこっそりコードを修正しておこうかと思います!!

  2. admin より:

    どうも、どうも!
    ただ一つだけ欠点があって、AS 側の変数を使いたい時がクォーテーション文字列よりめんどくさいんですよね。

  3. [...] unbland.net blog – ActionScript 3 での色々な文字列の扱い方 (tags: actionscript) [...]

  4. ひろ より:

    おお!これは素晴らしい!
    CDATA内で変数の内容を反映させたい場合はどうするのでしょう?

  5. admin より:

    CDATA セクションは文字列として扱われるので、<![CDATA[]]> + variables + <![CDATA[]]> のようにすれば大丈夫です。ただ、”" での文字列連結に比べると見にくいです。あと、上記例みたいに ExternalInterface.call とかで CDATA セクションを使う場合には、改行・タブなどが入ると JS とのやりとり時にデータが多くなってしまいます。ですので、String().replace(/\t|[ ]{4}/gm, “”) など正規表現で余分なものを取り除いた方が良いかもしれません。

  6. ひろ より:

    ありがとうございます!
    変数を扱う場合には一手間入りますが、それでも便利なことには違いありませんね。

  7. admin より:

    覚えるとかなり便利だと思いますよー。
    ショボいブログですが、今後ともよろしくお願いします!

  8. naoto5959 より:

    先日、unbland as3 libraryのソースコードを
    拝見致しましたところ、この記述を見てかなり興奮しました。

    CDATA セクション、jsとの連携時に活躍しそうですね。

  9. admin より:

    > naoto5959 さん
    コメントありがとうございます。
    ExternalInterface.call 使う時にはかなり重宝できます。
    FD ならコード補完も効きますし(AS 側のですが)。

Leave a Reply