9

私のこれまでの唯一の経験#targetengine#targetengine "session";、InDesignでスクリプトを作成するときにダイアログをパレットに変えていたときです。しかし、メニューのスクリプトを作成する方法を理解しようとすると、ポップアップが他の方法で使用され、。以外の用語(ターゲット?)を使用しているのがわかり始めていますsession

アドビは、スクリプトを作成したい人は誰でも経験豊富なプログラマーであると想定するのが好きなので、これが何であるかについて明確な説明を見つけられませんでした。

それで、私が使うとき、私は#targetengine何をしていますか?以外の用語を使用できます"session"か?一部の検索では、この機能がグローバル変数に関係していることが示唆されました。そうですか?その場合、InDesignを再起動せずにそれらをクリアするにはどうすればよいですか?これはJavaScriptのものですか、それともExtendScript / InDesign機能ですか?

4

2 に答える 2

30

#targetengineInDesign、PhotoShop、IllustratorなどのAdobeスクリプトに固有です。これは一般的なJavascript機能ではありません。

変数だけでなく、関数宣言やその他のグローバルステータスへの変更など、すべてのグローバルな「もの」を処理する方法を指定します。

デフォルトの「メイン」エンジンを使用する場合、スクリプトが完了するとすぐにすべてのグローバルが消えます。'session'エンジンを使用する場合、ホストアプリケーションが実行され続ける限り、すべてのグローバルが保持されます。これは、スクリプトを実行すると次のことを意味します。

#targetengine "session"

var test = "test";

その後、スクリプトを実行します。

#targetengine "session"

alert(test);

testエラーを表示する代わりに、メッセージボックスが表示されます

2つの標準の「メイン」エンジンと「セッション」エンジンに加えて、任意の名前で独自のエンジンを作成できます。したがって、スクリプトを実行すると

#targetengine "mine"

var test = "another test";

その後、実行します

#targetengine "mine"

alert(test);

を示すメッセージボックスが表示されますanother testが、再度実行すると

#targetengine "session"

alert(test);

あなたはまだ得ますtest:2つの異なる「テスト」グローバル変数があります。1つは「セッション」エンジンにあり、もう1つは(新しく作成された)「マイニング」エンジンにあります。

于 2012-12-27T22:55:24.047 に答える
2

この議論は、私が監視しているSlackチャネルで取り上げられました。ある長年の開発者は次のように述べています(明確にするために少しクリーンアップしました):

私の知る//@targetengine限り、InDesign(おそらくInCopyを含む)とIllustratorでのみ動作します。

InDesignでは正しく機能しますが、Illustratorでは機能しません。それにもかかわらず、私が知る限り、他のアプリはすべてC ++でターゲットエンジンを使用する機能を備えており、それがCEPが独自の分離エンジンを持つ各CEP [拡張機能?]で行うことです。

エンジンには少なくとも3種類あります。

  1. mainエンジン、InDesignでは、スクリプトの実行が完了した後、すべてを忘れる一時的なエンジンです。

  2. Public Privateこのようなエンジンsessionは、スクリプトの実行後にアクティブになり、イベントリスナーに適しています。これらは、ESTK / vsCodemainを使用して識別し、見つけることができます$.engineName

  3. Private Private $.engineNameは、CEPが選択可能なエンジンを""使用するInDesignを除いて、ほとんどのアプリが使用し、CEPが使用するものをC++でのみ作成できることを示します。Public Private

彼は忘れている4番目のタイプもあると思います。

于 2019-07-23T22:14:20.793 に答える