CSXSEventでobjectデータを送信する
AdobeのスクリプトでPanel間やjsx・js間でデータのやりとりをすることができるCSXSEventですが、普段stringしか送っていなかったのをデータを送りたいなーと思いやってみたという話。
思ったより簡単にできました。
CSXSEvent基礎
基本はこう書きます
var mylib = new ExternalObject( "lib:\PlugPlugExternalObject" );
var eventObj = new CSXSEvent();
eventObj.type = "event_type"; // 好きなidentifierをつける
eventObj.data = "message";
eventObj.dispatch();
ちなみにphotoshopであれば"lib:\PlugPlugExternalObject"
が内臓されているらしいので特にファイルをダウンロードしなきゃいけないとかはありません。
var csInterface = new CSInterface();
csInterface.addEventListener("event_type", function (event) {
console.log(event.data);
});
event.dataにはもちろん"message"
(string)が入っています。
event.dataにObjectを入れる
stringだと物足りないので、Objectデータを送信したい!という気持ちでチャレンジ
var data = {
message : "送りたいメッセージとかを書き込んでみる",
id : 1 // idとか取得した数値とかを追加で送ってみる
}
var mylib = new ExternalObject( "lib:\PlugPlugExternalObject" );
var eventObj = new CSXSEvent();
eventObj.type = "event_type"; // 好きなidentifierをつける
eventObj.data = data;
eventObj.dispatch();
しかし、これで受け取り側でconsole.logを出してみると、objectがstringで送信されてしまうため、[object object]と表示されてしまいます。
event.dataにJson化したデータを入れる
やはりstring以外は送れないのかなーと思ったのですが、stringならばjsondで送ってパースすれば良いのでは?という思いつき。
※ちなみにAdobeのJsxではJSON.stringify/JSON.parseのメソッドが使えないので外部からincludeする必要があります。私はgithub.com/douglascrockford/JSON-jsを利用させていただいています。いくつか方法があると思いますので、お好きな方法を取ってみてください。
var data = {
message : "送りたいメッセージとかを書き込んでみる",
id : 1 // idとか取得した数値とかを追加で送ってみる
}
var mylib = new ExternalObject( "lib:\PlugPlugExternalObject" );
var eventObj = new CSXSEvent();
eventObj.type = "event_type"; // 好きなidentifierをつける
eventObj.data = JSON.stringify(data); // JSON化させる
eventObj.dispatch();
こんな感じで送信すると、特に受け取り側ではparseなどしなくても受け取ることができます
CSXSEventはちょっとしたタイミングの受け渡しでしか使えていなかったのですが、色々なデータを詰めて送れるとなるととても便利に使えそうです。
Author And Source
この問題について(CSXSEventでobjectデータを送信する), 我々は、より多くの情報をここで見つけました https://qiita.com/k-wth/items/7c16a42ad16b300d0ec6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .