app.doScript 和 $.evalFile 之间有什么区别?

2024-05-13

到目前为止我发现的唯一区别:如果运行的脚本app.doScript返回错误,错误的文件和行号被错误的文件和行号覆盖app.doScript call.

还有其他我应该了解的差异吗?

以下是演示上述差异的示例代码:

首次运行 InDesign:

c:
cd "C:\Program Files\Adobe\Adobe InDesign CS6 Server x64"
InDesignServer.com -port 12345
pause

接下来创建一个批处理文件来运行脚本:

c:
cd "C:\Program Files\Adobe\Adobe InDesign CS6 Server x64"
sampleclient -host localhost:12345 -server "C:/doscript_vs_evalfile/call_doScript.jsx"
pause

这是“call_doScript.jsx”,它将调用app.doScript。

try {
    app.doScript(new File("/c/doscript_vs_evalfile/called_by_doScript.jsx"));
    "Success";
}
catch (e) {
    var sError = "Encountered " + e.name + " #" + e.number + " at line " + e.line + " of file " + e.fileName + "\n" + e.message;
    app.consoleout(sError);
    sError;
}

这是“used_by_doScript.jsx”,由前面的脚本调用:

app.consoleout("Running called_by_doScript.jsx");
// Produce error
var a = b;

运行批处理文件,结果如下:

02/25/13 13:30:03 INFO  [javascript] Executing File: C:\doscript_vs_evalfile\call_doScript.jsx
02/25/13 13:30:03 INFO  [javascript] Executing File: C:\doscript_vs_evalfile\called_by_doScript.jsx
02/25/13 13:30:03 INFO  [script] Running called_by_doScript.jsx
02/25/13 13:30:03 INFO  [script] Encountered ReferenceError #2 at line 2 of file /c/doscript_vs_evalfile/call_doScript.jsx
b is undefined

请注意,上面的错误是不正确的。该错误是由 Called_by_doScript 的第 3 行引起的,而不是由 call_doScript 的第 2 行引起的。

现在修改脚本以使用 $.evalFile,我们得到以下结果:

02/25/13 13:32:39 INFO  [javascript] Executing File: C:\doscript_vs_evalfile\call_evalFile.jsx
02/25/13 13:32:39 INFO  [script] Running called_by_evalFile.jsx
02/25/13 13:32:39 INFO  [script] Encountered ReferenceError #2 at line 3 of file /c/doscript_vs_evalfile/called_by_evalFile.jsx
b is undefined

请注意,现在错误已报告在正确的位置。


Edit:

我发现稀疏的文档。它并没有真正回答我的问题,但它确实描述了不同的可选参数。

执行脚本: Adobe InDesign CS6 脚本编写指南:JavaScript http://www.adobe.com/devnet/indesign/documentation.html (直接链接 http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/indesign/sdk/cs6/scripting/InDesign_ScriptingGuide_JS.pdf)
请参见第 16 页,“使用 doScript 方法”

评估文件: JavaScript 工具指南:Adobe Creative Suite 5 http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/indesign/pdfs/JavaScriptToolsGuide_CS5.pdf
参见第 219 页


$.evalFile 是 ExtendScript 功能,而 app.doScript 由 InDesign 实现。

$.evalFile 确实

  • 维护$.stack
  • 考虑 $.includePath
  • 在其他目标应用程序中工作

app.doScript 可以

  • 传递参数
  • 更改语言,例如苹果脚本
  • 使用#targetengine 来处理其他会话
  • 尽可能修改支持的撤消/事务模式

but ...

  • 嵌套的 doScript 调用覆盖参数
  • 在复杂的设置中,在传递超过 12 个参数后,我很难进行调试。
  • 单步跨 doScript 很麻烦

此外,正如您所发现的,错误处理有所不同。密切关注异常情况...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

app.doScript 和 $.evalFile 之间有什么区别? 的相关文章

  • 创建具有动态更新变量的数组

    我有一些 PHP 变量 它们的名称直接链接到它们包含的函数 是否有办法自动创建这些变量 以便我可以使用所有变量 00 200 这就是我现在正在做的事情 regdays00 is user reg matured 00 regdays02 i

随机推荐