asfunctionの引数には制限がある

textFieldのリンクから関数を呼びたいときはasfunctionプロトコルを使いますが、
引数に文字数制限があるみたい。

●サンプル

_root.createTextField("tf",_root.getNextHighestDepth(),0,0,100,20);
var arg:String = "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
trace(arg.length);
var tf:TextField;
tf.html = true;
tf.htmlText = "<a href='asfunction:test," + arg + "'>call function test</a>"
function test(s:String):Void {
trace(s.length)
}
//output
//200
//112

では引数の内容が多いときにはどうすればいいのか?
試しに引数としてobjectを渡してみる。

_root.createTextField("tf",_root.getNextHighestDepth(),0,0,100,20);
var arg:Object = new Object();
arg.id = 1
arg.name = "hoge"
arg.value = "abcdefg"
var tf:TextField;
tf.html = true;
tf.htmlText = "<a href='asfunction:test," + arg + "'>call function test</a>"
function test(o:Object):Void {
trace(o);
trace("渡っているようで")
for(var i in o) trace([i,o[i]]);
trace("失敗")
}
//output
//[object Object]
//渡っているようで
//失敗

あえなく失敗。
htmlText展開時に単に”[Object Object]”という文字列に変換されているみたい。
よく考えれば当たり前か。。

結局次のようなコードで解決した。

var record:Array = new Array();
for (var i=0; i<20; i++){
//引数セットをobjectに格納する
var arg:Object = new Object();
arg.id = i;
arg.txt = "とても長い引数";
//引数セットobjectを配列に格納
record.push(arg)
_root.createTextField("tf"+i,_root.getNextHighestDepth(),0,i*20,100,20);
var tf:TextField = this["tf"+i];
tf.html = true;
tf.htmlText = "&lta href='asfunction:test," + arg.id + "'>call function test</a>"
}
function test(id:Number):Void {
trace(record[id].txt)
}


Flash8では、この制限はなくなっているみたい。
とりあえず10,000文字の引数を渡してみたけど、ちゃんと受け取れていました。

カテゴリー: ActionScript2 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です