LoginSignup
1
0

More than 3 years have passed since last update.

CSXSEventでobjectデータを送信する

Posted at

AdobeのスクリプトでPanel間やjsx・js間でデータのやりとりをすることができるCSXSEventですが、普段stringしか送っていなかったのをデータを送りたいなーと思いやってみたという話。
思ったより簡単にできました。

CSXSEvent基礎

基本はこう書きます

sender.jsx
 var mylib = new ExternalObject( "lib:\PlugPlugExternalObject" );
 var eventObj = new CSXSEvent();
 eventObj.type = "event_type"; // 好きなidentifierをつける
 eventObj.data = "message";
 eventObj.dispatch();  

ちなみにphotoshopであれば"lib:\PlugPlugExternalObject"が内臓されているらしいので特にファイルをダウンロードしなきゃいけないとかはありません。

receiver.js
 var csInterface = new CSInterface();
 csInterface.addEventListener("event_type", function (event) {
   console.log(event.data);
 });

event.dataにはもちろん"message"(string)が入っています。

event.dataにObjectを入れる

stringだと物足りないので、Objectデータを送信したい!という気持ちでチャレンジ

sender.jsx
 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]と表示されてしまいます。
スクリーンショット 2019-09-02 1.34.58.png

event.dataにJson化したデータを入れる

やはりstring以外は送れないのかなーと思ったのですが、stringならばjsondで送ってパースすれば良いのでは?という思いつき。
※ちなみにAdobeのJsxではJSON.stringify/JSON.parseのメソッドが使えないので外部からincludeする必要があります。私はgithub.com/douglascrockford/JSON-jsを利用させていただいています。いくつか方法があると思いますので、お好きな方法を取ってみてください。

sender.jsx
 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などしなくても受け取ることができます
スクリーンショット 2019-09-02 1.44.17.png

CSXSEventはちょっとしたタイミングの受け渡しでしか使えていなかったのですが、色々なデータを詰めて送れるとなるととても便利に使えそうです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0