什么是#targetengine?

Bre*_*dan 8 javascript extendscript adobe-indesign

我之前唯一的经验#targetengine是,当我#targetengine "session";在InDesign中编写脚本时,我习惯将对话框转换为调色板.但是当我试图找出如何编写菜单脚本时,我开始看到它弹出以其他方式使用并使用除了之外的术语(目标?)session.

Adobe喜欢假设每个想要编写脚本的人有时都是经验丰富的程序员,所以我没有找到关于这是什么的明确解释.

所以,当我使用时#targetengine,我在做什么?我可以使用除以外的任何术语"session"吗?一些搜索建议此功能与全局变量有关; 那是这样吗?如果是这样,如何在不重新启动InDesign的情况下清除它们?这是JavaScript的东西还是ExtendScript/InDesign功能?

MiM*_*iMo 26

#targetengine 特定于InDesign,PhotoShop,Illustrator等中的Adobe脚本 - 它不是一般的Javascript功能.

它指定了如何处理所有全局"东西" - 不仅是变量,还有函数声明和全局状态的任何其他变化.

如果使用默认的'main'引擎,则脚本完成后,所有全局变量都会消失.如果使用'session'引擎,只要主机应用程序继续运行,就会保留所有全局变量.这意味着如果您运行脚本:

#targetengine "session"

var test = "test";
Run Code Online (Sandbox Code Playgroud)

然后运行脚本:

#targetengine "session"

alert(test);
Run Code Online (Sandbox Code Playgroud)

你得到一个消息框test而不是给出错误

除了两个标准的"主"和"会话"引擎,您可以使用任意名称创建自己的引擎 - 因此,如果您运行脚本

#targetengine "mine"

var test = "another test";
Run Code Online (Sandbox Code Playgroud)

然后跑

#targetengine "mine"

alert(test);
Run Code Online (Sandbox Code Playgroud)

你会看到一个消息框another test,但如果再次运行

#targetengine "session"

alert(test);
Run Code Online (Sandbox Code Playgroud)

你仍然得到test:有两个不同的'测试'全局变量,一个在'session'引擎中,一个在(新创建的)'mine'中.