一つ前のエントリで取り上げたlog.asの実装のこの部分。
25 26 27 28 29 30 31 32 33 34 35 36 37 | try { ExternalInterface.call(<><![CDATA[ (function(obj, klassName) { obj.toString = function() { return klassName }; console.log(obj); ;}) ]]></>.toString(), ObjectUtil.clone(arg), getQualifiedClassName(arg) ); } catch(e:Error) { ExternalInterface.call('console.log', r); } |
ExternalInterface.callの第一引数がなんか見慣れない書式。
なんかオブジェクトつくってtoStringしてる?
調べてみた。
package { import flash.display.*; public class Hello extends Sprite { public function Hello(){ var hoge:Object = <><![CDATA[ (function(obj, klassName) { obj.toString = function() { return klassName }; console.log(obj); ;}) ]]></>; log(hoge); log(hoge.toString()); } } }

なるほどー。CDATAセクションのみのXMLListオブジェクトつくってtoStringしてるんですね。それにしても変わった書式。
というか、ExternalInterface.callの第一引数、evalしたときに関数になってたら何でもokなんすね。
これならjs,flashの連携が楽にできそ。

