9

我之前唯一的经验#targetengine是在 InDesign 中编写脚本时,我曾经#targetengine "session";将对话框变成调色板。但是当我试图弄清楚如何编写菜单脚本时,我开始看到它以其他方式弹出并使用了一个术语(目标?)而不是session.

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

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

4

2 回答 2

30

#targetengine特定于 InDesign、PhotoShop、Illustrator 等中的 Adob​​e 脚本 - 它不是一般的 Javascript 功能。

它指定了如何处理所有全局“东西”——不仅是变量,还有函数声明和对全局状态的任何其他更改。

如果您使用默认的“主”引擎,所有全局变量都会在脚本完成后立即消失。如果您使用“会话”引擎,只要主机应用程序继续运行,所有全局变量都会被保留。这意味着如果您运行脚本:

#targetengine "session"

var test = "test";

然后运行脚本:

#targetengine "session"

alert(test);

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

除了两个标准的“主”和“会话”引擎之外,您还可以使用任意名称创建自己的引擎 - 所以如果您运行脚本

#targetengine "mine"

var test = "another test";

然后运行

#targetengine "mine"

alert(test);

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

#targetengine "session"

alert(test);

你仍然得到test:有两个不同的“测试”全局变量,一个在“会话”引擎中,一个在(新创建的)“我的”引擎中。

于 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在脚本执行后会记住并处于活动状态,并且对事件侦听器有好处。这些main可以使用$.engineName并在 ESTK / vsCode 上找到

  3. Private Private $.engineName将显示""只能使用 C++ 创建大多数应用程序使用和 CEP 使用的内容,除了 InDesign,其中 CEP 使用Public Private可以选择的引擎。

他认为还有第四种他忘记了。

于 2019-07-23T22:14:20.793 回答