クリエイター手抜きプロジェクト[280]Adobe Bridge CS3/CS4/CS5編 アプリケーション間でやりとりする(2)
── 古籏一浩 ──

投稿:  著者:


BridgeTalkを使ってアプリケーションを呼び出す際に、処理したデータなどを渡したい場合があります。BridgeTalkで呼び出された場合、呼び出し元にデータを戻すにはapp.bodyに戻り値を入れます。ただし、InDesignはapp.bodyではなくbodyに戻り値を入れます。

以下のスクリプトは、呼び出したアプリケーションからの戻り値をESTKのコンソールに表示します。



(function(){
var PSCS3 = "photoshop-10";
var AICS3 = "illustrator-13";
var AECS3 = "aftereffects-8";
var IDCS3 = "indesign-5";
var BRCS3 = "bridge-2";
var funcList = [];
funcList[0] = { target : PSCS3, func : "alert(0);app.body='Photoshop'" };
funcList[1] = { target : AICS3, func : "alert(1);app.body='Illustrator'" };
funcList[2] = { target : AECS3, func : "alert(2);app.body='AfterEffects'" };
funcList[3] = { target : BRCS3, func : "alert(3);app.body='Bridge'" };
funcList[4] = { target : IDCS3, func : "alert(4);body='InDesign'" };
funcList[5] = { target : PSCS3, func : "alert(5);app.body='Photoshopその2'" };
var count = 0;
myBTalk();

function myBTalk(){
var btObj = new BridgeTalk;
btObj.body = funcList[count].func;
btObj.target = funcList[count].target;
btObj.onResult = function(resObj){
$.writeln(resObj.body);
if (count++ < funcList.length) myBTalk();
}
btObj.send();
}
})();


これだけだと戻すだけですが、実際には次のアプリケーションにデータを渡したいので、以下のようにします。


(function(){
var PSCS3 = "photoshop-10";
var AICS3 = "illustrator-13";
var AECS3 = "aftereffects-8";
var IDCS3 = "indesign-5";
var BRCS3 = "bridge-2";
var funcList = [];
funcList[0] = { target : PSCS3, func : "alert(arg);app.body='Photoshopから'" };
funcList[1] = { target : AICS3, func : "alert(arg);app.body='Illustratorから'" };
funcList[2] = { target : AECS3, func : "alert(arg);app.body='AfterEffectsから'" };
funcList[3] = { target : BRCS3, func : "alert(arg);app.body='Bridgeから'" };
funcList[4] = { target : IDCS3, func : "alert(arg);body='InDesignから'" };
funcList[5] = { target : PSCS3, func : "alert(arg);app.body='Photoshop最後'" };
var count = 0;
myBTalk(2010);

function myBTalk(param){
var btObj = new BridgeTalk;
btObj.body = "arg='"+param+"';"+funcList[count].func;
btObj.target = funcList[count].target;
btObj.onResult = function(resObj){
$.writeln(resObj.body);
if (count++ < funcList.length) myBTalk(resObj.body);
}
btObj.send();
}
})();


BridgeTalkで何でも渡せるわけでないので、必要に応じてファイルにデータを保存するといった対処も必要になります。また、上記のサンプルは直接配列内にスクリプトコードを書いていますが、スクリプトは別ファイルにして読み込み、それをBridgeTalkオブジェクトのbodyプロパティに代入するようにした方がミスは軽減されるでしょう。


【古籏一浩】openspc@alpha.ocn.ne.jp
< http://www.openspc2.org/
>

MacProのメモリを32GBに増設。さすがに、これだけ大容量のメモリになると32GB使い切るのは未だになし(24GBくらいまでは消費)。あと、HDDも12TB(RAID5で使用。元は15TB)にしたので、やっとファイルをあちこちに移動させなくて済むようになりました。
メモリとかが2倍になっても仕事が2倍速で終わるわけじゃないですけど...。

・毎度おなじみASCII.jpの連載。HTML5+NimbleKitでiPhoneアプリ作り第5回
「JavaScriptでiPhone/iPad用フォトアルバムを作ろう」
< http://ascii.jp/elem/000/000/612/612655/
>

・Google API Expertが解説する HTML5逆引きリファレンス(6/23発売)
< http://www.amazon.co.jp/dp/4844330349
>

・iPhone/iPad × HTML5アプリ制作
< http://www.amazon.co.jp/dp/4797362618
>

・ハイビジョン映像素材集
< http://www.openspc2.org/HDTV/
>

・Adobe Illustrator CS3 + JavaScript 自動化サンプル集
< http://www.openspc2.org/book/PDF/Adobe_Illustrator_CS3_JavaScript_Book/
>