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

Adobe app.doScript和$.evalFile之间有什么区别?,adobe,adobe-indesign,extendscript,indesign-server,Adobe,Adobe Indesign,Extendscript,Indesign Server,到目前为止,我发现的唯一区别是:如果由app.doScript运行的脚本返回错误,则错误的文件和行号将被app.doScript调用的文件和行号覆盖 还有什么我应该知道的区别吗 下面是演示上述差异的示例代码: 首次运行InDesign: c: cd "C:\Program Files\Adobe\Adobe InDesign CS6 Server x64" InDesignServer.com -port 12345 pause 接下来,创建批处理文件以运行脚本: c: cd "C:\Prog

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

还有什么我应该知道的区别吗

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

首次运行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;
}
这是“由_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
请注意,上面的错误是不正确的。错误是由call_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
请注意,错误现在报告在正确的位置


编辑:

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

doScript:()
参见第16页,“使用doScript方法”

评估文件:

请参见第219页。

$。evalFile是ExtendScript的一项功能,而app.doScript是通过InDesign实现的

$.evalFile有

  • 维护$.stack
  • 以$.includePath为例
  • 在其他目标应用程序中工作
app.doScript可以

  • 传递参数
  • 更改语言,例如AppleScript
  • 使用#targetengine处理其他会话
  • 尽可能修改撤消/事务模式
但是

  • 嵌套的doScript调用覆盖参数
  • 在一个复杂的设置中,我在传递了12个以上的参数后,调试遇到了困难
  • 单步跨过doScript是个麻烦

此外,正如您所发现的,错误处理也有所不同。注意例外情况…

我不知道答案,但我敢说,使用app.doscript,您可以运行js文件和vbs文件。这些文件中的任何一个都可以用于在web服务器上远程访问js文件吗?i、 e.“?@CarlPapworth您可以使用
app.doScript
执行AppleScript来运行
do shell脚本
来执行
curl
命令。您必须确保引号被正确转义,但它确实有效。遗憾的是,这是我在ExtendScript中发现的唯一一种实现这一点的方法。