2009-07-21
BridgeTalkまとめ…というか覚え書き【修正】
DTP, ExtendScript, JavaScript, BridgeTalk
イラストレーターのtoSource,unevalがObjectでスタックオーバーランしていたのは自分の書いたスクリプト[c.js]が悪さしていたようです。オブジェクトを安易に汚染するのは良くないですね。
とういうことで上記に関わる部分を削除しました。
BridgeTalkについてできるだけまとめてみる。
というか、現在自分が理解できている範囲の覚え書きです。
BridgeTalkするアプリケーションのバージョンを指定
bt.target = "illustrator";
と書いていて、同じCSのバージョン同士でしか使えないと思ってたんだけど、CS3以降であればCSバージョンをまたいで指定することができる。
bt.target = "illustrator-13.0";//Bridge CS3 bt.target = "illustrator-14.0";//Bridge CS4
投げた処理が終わったら実行する。
投げた処理が終わり次第、実行させるものを書いておく。
ここで処理が終わるまでは待っていてはくれない。
非同期になるのでそれを踏まえた書き方をしなくてはいけない。
詳しくは中綴千頁さんが解説されている。Double-talk Publisher BridgeTalk考
bt.onResult = function(resObj) {};
**BridgeTalkは同期も非同期もいける
BridgeTalkは非同期なのかと勘違いしていたんだけど、
onResultに無名関数でもいいのでonResultに関数を設定すれば、
処理が終わるまで待ってくれるみたい。
onResultで帰ってきたオブジェクトはBridgeTalkObjectでbodyに返り値が入ってる。
bt.onResult = function(resObj) {processResult(resObj.body);};
実際に送るbodyに入れるScriptは、uneval()やtoSource()を使うとよい。
普通にfunctionを書くように書けるので楽。
bt.body=uneval(function(){})+"()"; bt.body=function(){}.toSource()+"()";
引数で渡す場合や戻り値は、uneval()やtoSource()を使うとよい。
引数で渡す場合
bt.body=uneval(function(val){ val = eval(val); })+"("+['A','B','C'].toSource()+");";
戻り値にする場合
return val.toSource();
ただし、イラストレターのuneval()とtoSource()はObjectに摘要するとスタックエラーが出てしまう。
回避策としては、こんな感じでfunctionで包んでしまうといける。
uneval(function(){return {sleep:5000};});
この場合は
eval('val =' +val+"();");
としてもとに戻す。
send()にはタイムアウトまでの秒数を引数として指定できる。
bt.send(30);
onTimeoutにタイムアウト時の処理を書けばいいらしい。
bt.onTimeout = function(){...}
まとめて書いたらこんな感じ。
(function(){ //TEST用 var bt = new BridgeTalk; bt.target = "bridge"; //ターゲットへ送るScriptを記入 //コメントアウトを含めていたりするとエラーが出たりする。 bt.body = function(Value){ $.sleep (5000); return Value.toSource(); }.toSource()+"("+uneval({message:"bridgeでの処理が終わりました。"})+");"; //返り値に対しての処理を記入 bt.onResult = function(resObj) { Value = eval(resObj.body); alert(Value.message); flag = false; }; //TimeOutした場合の処理を記入 bt.onTimeout = function(resObj){ alert('タイムアウトになりました。'); } //使い方がよく判らない。 /* bt.onReceive = function(resObj){ $.bp(); }; */ //送ったスクリプトでエラーが出た場合の処理を記入 bt.onError = function(resObj){alert( resObj.body + " (" + resObj.headers ["Error-Code"] + ")" );}; //スクリプトの送信を実行。引数にはタイムアウトまでの秒数を指定。 bt.send(1); //TEST alert('非同期なので先にこのメッセージが表示される'); })();
課題
トラックバック - http://d.hatena.ne.jp/kamiseto/20090721/1246622746
リンク元
- 12 http://search.yahoo.co.jp/search?p=イラストレーター ランダムに配置&search.x=1&fr=top_ga1_sa&tid=top_ga1_sa&ei=UTF-8&aq=&oq=
- 9 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGLL_jaJP327JP327&q=フォトショップ 3D押し出し
- 7 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&q=JODConverter&btnG=検索&lr=lang_ja
- 7 http://www.google.co.jp/search?hl=ja&q=イラストレーター+画像+分割&lr=
- 7 http://www.google.co.jp/search?q=イラストレーター 文字&hl=ja&rlz=1T4DBJP_jaJP330JP330&start=10&sa=N
- 6 http://awasete.com/show.phtml?u=http://d.hatena.ne.jp/seuzo/
- 6 http://ezsch.ezweb.ne.jp/search/?sr=0101&query=なにする
- 5 http://awasete.com/show.phtml?u=http://blog.dtpwiki.jp/dtp/&h=1
- 5 http://awasete.com/show.phtml?u=http://pocketdtp.blog16.fc2.com/
- 5 http://dtpwiki.jp/planet/








![ActionScript 3.0辞典 [FlashPlayer10/9対応] ActionScript 3.0辞典 [FlashPlayer10/9対応]](http://ecx.images-amazon.com/images/I/51ry2e8HtIL._SL75_.jpg)




