What is the difference between app.doScript and $.evalFile?

风流意气都作罢 提交于 2019-12-12 07:59:20

问题


The only difference I have found so far: If a script that is run by app.doScript returns an error, the file and line number of the error are overridden by the file and line number of the app.doScript call.

Are there any other differences I should know about?

Here's sample code that demonstrates the above difference:

First run InDesign:

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

Next create a batch file to run a script:

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

This is "call_doScript.jsx", which will call 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;
}

This is "called_by_doScript.jsx", which is called by the previous script:

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

Run the batch file and this is the result:

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

Notice that the error above is incorrect. The error was caused by line 3 of called_by_doScript, not line 2 of call_doScript.

Now modify the scripts to use $.evalFile, and we get this result:

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

Notice that the error is now reported at the correct location.


Edit:

I found sparse documentation. It doesn't really answer my question, but it does describe different optional parameters.

doScript: Adobe InDesign CS6 Scripting Guide: JavaScript (direct link)
See page 16, "Using the doScript Method"

evalFile: Javascript Tools Guide: Adobe Creative Suite 5
See page 219


回答1:


$.evalFile is an ExtendScript feature while app.doScript is implemented by InDesign.

$.evalFile does

  • maintain the $.stack
  • consider $.includePath
  • work in other target applications

app.doScript can

  • pass arguments
  • change the language, e.g. AppleScript
  • use #targetengine to address other sessions
  • modify the undo/transaction mode as far as supported

but ...

  • nested doScript calls overwrite arguments
  • in a complicated setup I had trouble to debug after passing more than 12 arguments.
  • single stepping across doScript is trouble

Also, as you found, error handling differs. Keep an eye on exceptions ...



来源:https://stackoverflow.com/questions/15074220/what-is-the-difference-between-app-doscript-and-evalfile

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!