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

时间:2013-02-25 18:51:51

标签: adobe adobe-indesign extendscript indesign-server

到目前为止我找到的唯一区别:如果由app.doScript运行的脚本返回错误,则错误的文件和行号将被{{1}的文件和行号覆盖打电话。

我应该知道其他差异吗?

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

首先运行InDesign:

app.doScript

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

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

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

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

这是“called_by_doScript.jsx”,由前一个脚本调用:

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;
}

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

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

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

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

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

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


修改

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

doScript: Adobe InDesign CS6 Scripting Guide: JavaScriptdirect link
请参见第16页,“使用doScript方法”

evalFile: Javascript Tools Guide: Adobe Creative Suite 5
见第219页

1 个答案:

答案 0 :(得分:8)

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

$ .evalFile

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

app.doScript可以

  • 传递参​​数
  • 更改语言,例如AppleScript的
  • 使用#targetengine来解决其他会话
  • 修改撤消/交易模式,直至支持

但......

  • 嵌套的doScript调用覆盖参数
  • 在一个复杂的设置中,我在传递超过12个参数后遇到调试问题。
  • 单步执行doScript是麻烦

另外,正如您所发现的,错误处理有所不同。留意异常...