リンクをクリップボードにコピー
コピー完了
> //ターゲットエンジン指定(←を入れないとdialog以外のウインドウが開かない?)
ですです。
Ten Aさんの言われている通りです。ハンドラ関数をBridgeTalk経由でIllustratorに送らないと動きません。
自分も相当だるい思いをした経験あります。
var bt = new BridgeTalk();
bt.target = "illustrator";
bt.body = "alert('hoge');";
bt.send();
というのがシンプルな例ですが、bodyは文字列で送る必要があり、メンテナンス性がよくないです。
そこで関数全体をuneval()で括る手段にみんなで飛びつきました。
var bt = new BridgeTalk();
bt.target = "illustrator";
bt.body = uneval(alertFunc) + "(" + "hoge".toSource() + ");";
bt.send();
function alertFunc(mes){
alert(mes);
}
完了アラートは上記
...いろいろ書き方はあると思うのですが、
個人的なおすすめの、palette使ったスクリプトの書き方です。
・ターゲットエンジンはmain
・1つだけ、ユニークな名前のグローバル変数でオブジェクト作る
・そのオブジェクトの中に関数とかパラメータを埋め込む
・メインの処理は(function (){…})();で囲む
・BridgeTalkのbodyは"オブジェクト名.関数名();"だけにする
・BridgeTalkのtargetは"illustrator"じゃなくBridgeTalk.appSpecifier
#targetengine "main"
var nankaKakkoiiNamae={};
(function (){
var w1=new Window("palette");
var b1=w1.add("button",undefined,"ボタン1");
b1.onClick=function(){
var bt=new BridgeTalk;
bt.target = BridgeTalk.appSpecifier;
...
リンクをクリップボードにコピー
コピー完了
リンクをクリップボードにコピー
コピー完了
ご回答ありがとうございます!
BridgeTalkを使って、無事解決いたしました。
CEPというものもあるのですね。カスタマイズ性が高そうでとても便利そうです...!勉強してみます。
リンクをクリップボードにコピー
コピー完了
> //ターゲットエンジン指定(←を入れないとdialog以外のウインドウが開かない?)
ですです。
Ten Aさんの言われている通りです。ハンドラ関数をBridgeTalk経由でIllustratorに送らないと動きません。
自分も相当だるい思いをした経験あります。
var bt = new BridgeTalk();
bt.target = "illustrator";
bt.body = "alert('hoge');";
bt.send();
というのがシンプルな例ですが、bodyは文字列で送る必要があり、メンテナンス性がよくないです。
そこで関数全体をuneval()で括る手段にみんなで飛びつきました。
var bt = new BridgeTalk();
bt.target = "illustrator";
bt.body = uneval(alertFunc) + "(" + "hoge".toSource() + ");";
bt.send();
function alertFunc(mes){
alert(mes);
}
完了アラートは上記の関数内に入れてしまえば処理後に普通に出るですが、
アラート後さらに何かしたい場合は、BridgeTalkの戻りをつかまえる必要があります。
var bt = new BridgeTalk();
bt.target = "illustrator";
bt.body = uneval(alertFunc) + "(" + "hoge".toSource() + ");";
bt.onResult = function(res){
button1.text = res.body;
}
bt.send();
function alertFunc(mes){
alert(mes);
return "おわった".toSource();
}
CEPは本当におすすめなんですが、証明書の発行などを的確にやらないとユーザーにデバッグモードでの使用を強いることになったりと、それなりにハードルはあります。CC2014以前では動かないなども(それはもういいか…)。
リンクをクリップボードにコピー
コピー完了
ご回答ありがとうございます!
コードの見本まで付けてくださり助かります。参考にさせていただきます。
BridgeTalkもunevalも使ったことがなかったのですが、IllustratorでIllustratorに関数を送る(?)には少し込み入った手順を踏む必要があるのですね。
CEPも便利そうなので勉強してみます...!!(まずはWebの知識から...)
リンクをクリップボードにコピー
コピー完了
いろいろ書き方はあると思うのですが、
個人的なおすすめの、palette使ったスクリプトの書き方です。
・ターゲットエンジンはmain
・1つだけ、ユニークな名前のグローバル変数でオブジェクト作る
・そのオブジェクトの中に関数とかパラメータを埋め込む
・メインの処理は(function (){…})();で囲む
・BridgeTalkのbodyは"オブジェクト名.関数名();"だけにする
・BridgeTalkのtargetは"illustrator"じゃなくBridgeTalk.appSpecifier
#targetengine "main"
var nankaKakkoiiNamae={};
(function (){
var w1=new Window("palette");
var b1=w1.add("button",undefined,"ボタン1");
b1.onClick=function(){
var bt=new BridgeTalk;
bt.target = BridgeTalk.appSpecifier;
bt.body = "nankaKakkoiiNamae.func1();",
bt.send();
}
var cb1=w1.add("checkbox",undefined, "チェック項目1");
cb1.value=nankaKakkoiiNamae.check1=false;
cb1.onClick=function(){
nankaKakkoiiNamae.check1=cb1.value;
}
nankaKakkoiiNamae.func1=function(){
alert("チェック項目1は"+(nankaKakkoiiNamae.check1?"ON":"OFF")+"です");
}
w1.show();
})();
リンクをクリップボードにコピー
コピー完了
ご回答ありがとうございます!
見本で貼ってくださったコードを参考にさせていただいて、
シンプルに記述でき、目的の関数も動かすことができました。
リンクをクリップボードにコピー
コピー完了
自分のブログに解説を少し書いてみましたので、ご参考にしていただければ幸いです。