什么是#targetengine?

时间:2012-12-27 21:43:04

标签: javascript adobe-indesign extendscript

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

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

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

2 个答案:

答案 0 :(得分:26)

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

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

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

#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:有两种不同的测试'全局变量,一个在'会话'引擎和一个(新创建的)' mine'之一。

答案 1 :(得分:1)

此讨论在我监控的Slack频道中进行。一位长期的开发人员说了以下内容(为清楚起见,进行了一些清理):

  

据我所知//@targetengine仅适用于InDesign(可能   包括InCopy)和Illustrator。

     

在InDesign上它可以正常工作,而在Illustrator上则不能。不过,据我所知,其他所有应用程序都可以将目标引擎与C ++一起使用,这就是CEP对每个具有独立引擎的CEP [扩展名]所做的工作。

     

至少有3种类型的引擎。

     
      
  1. main引擎,在InDesign中是一个临时引擎,在完成脚本执行后会忘记所有内容。

  2.   像Public Private这样的
  3. session引擎会记住脚本执行后并保持活动状态,对事件侦听器很有用。这些和main可以使用$.engineName进行标识,并可以在ESTK / vsCode中找到

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

  6.   

他认为还有第四种被他遗忘的类型。