1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Illustrator_script] windowメソッドでpalleteを設定した際に、なぜ#targetengineを設定する必要があるのか

Last updated at Posted at 2018-10-02

ExtendScriptを使ってIllustratorにダイアログを表示しようと思ったのですが、#targetengineの設定でおもった以上にハマったので備忘録として。

環境

OS:macOS 10.14
editor:Sublime Text3
application:illustrator CC2018

やりたいこと

ExtendScriptでIllustratorにキャンセルボタンがあるだけのシンプルなダイアログを表示させます。

やったこと

test.jsx
#target "illustrator"

var winObj = new Window('palette', 'sample', undefined);
//ボタンを作成する
var btnCancel = winObj.add("button",[100,70,170,100],"cancel",{name:'cancel'});

winObj.center();
winObj.show();

btnCancel.onClick = function(){winObj.close();}

windowメソッドの第1パラメータは以下の3つから選べるみたいなのでpalleteを選択。

windowメソッドの第1パラメータ
window
dialog
pallete

が、このコードではスクリプトを実行してもダイアログは表示されず。(エラーも出ない…)
調べてみたら #targetengine を指定しないといけないらしく以下コードに修正。

test_2.jsx
#target 'illustrator'
#targetengine 'test'

var winObj = new Window('palette', 'sample', undefined);
//ボタンを作成する
var myBtn = winObj.add("button", [50,100,270,120],"押してください");
var btnCancel = winObj.add("button",[100,70,170,100],"cancel",{name:'cancel'});

winObj.center();
winObj.show();

btnCancel.onClick = function(){winObj.close();}

このコードで無事動作しました。

なぜ#targetengineを指定しないといけなかったのか?

以下サイトで詳しく解説されていました。
targetengineについて

直列的に処理をこなして終了するスクリプトは同時に2つ以上実行されることはないので、結果的に排他的な環境で実行されます。adobeのJavaScript環境(ExtendScript)であれば、スクリプトは「main」という空間で実行され、終了後は暗示的にクリアされます。

それに対して常駐するスクリプトは、その実行環境を維持し続けるための「居場所」が必要になります。その場合、同じ居場所で不特定多数のスクリプトが実行されると、変数名の衝突が起こるなどの不都合が生じます。

常駐型スクリプトを走らせる場合、それぞれのスクリプトは変数名の衝突を避けるために固有の名前空間が必要です。

とのことで、今回のスクリプトではwindowにpalletを指定した「常駐型スクリプト」なのでスクリプトを実行する空間を#targetengineで設定してあげないといけなかったみたいです。

わからない点

常駐型スクリプトの場合、変数名の衝突などを防ぐために固有の名前空間をつくってあげないといけないことは理解しました。
しかしなぜ test.jsx のスクリプトで動作をしなかったのかまでは分かりませんでした。

1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?