2013-02-25 54 views
6

Sự khác biệt duy nhất tôi đã tìm thấy cho đến nay: Nếu tập lệnh được chạy bởi app.doScript trả về lỗi, tệp và số dòng của lỗi bị ghi đè bởi tệp và số dòng của cuộc gọi app.doScript.

Có bất kỳ khác biệt nào khác mà tôi nên biết không?

Dưới đây là mẫu mã đó chứng tỏ sự khác biệt trên:

Đầu tiên chạy InDesign:

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

Tiếp theo, tạo một tập tin batch để chạy một kịch bản:

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

Đây là "call_doScript. jsx ", sẽ gọi 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; 
} 

Đây là "called_by_doScript.jsx", được gọi là bởi kịch bản trước:

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

Chạy tập tin thực thi và đây là kết quả:

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 

Chú ý rằng lỗi ở trên không chính xác. Lỗi được gây ra bởi dòng 3 của hàm gọi_by_doScript, không phải dòng 2 của call_doScript.

Bây giờ thay đổi kịch bản để sử dụng $ .evalFile, và chúng tôi nhận được kết quả này:

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 

Chú ý rằng các lỗi ngay bây giờ được báo cáo tại địa điểm chính xác.


Edit:

tôi tìm thấy tài liệu thưa thớt. Nó không thực sự trả lời câu hỏi của tôi, nhưng nó mô tả các tham số tùy chọn khác nhau.

doScript:Adobe InDesign CS6 Scripting Guide: JavaScript (direct link)
Xem trang 16, "Sử dụng phương pháp doScript"

evalFile:Javascript Tools Guide: Adobe Creative Suite 5
Xem trang 219

+1

Tôi không biết câu trả lời, nhưng tôi sẽ liên doanh với app.doscript, bạn có thể chạy tệp js cũng như tệp vbs. – bgmCoder

Trả lời

6

$ .evalFile là một ExtendScript tính năng trong khi app.doScript được thực hiện bởi InDesign.

$ .evalFile không

  • duy trì $ .stack
  • xem xét $ .includePath
  • làm việc trong các ứng dụng mục tiêu khác

ứng dụng.doScript có thể

  • đối số truyền
  • thay đổi ngôn ngữ, ví dụ: AppleScript
  • sử dụng #targetengine để giải quyết các buổi khác
  • sửa đổi chế độ undo/giao dịch như xa như hỗ trợ

nhưng ...

  • lồng doScript gọi đối số ghi đè
  • trong một phức tạp thiết lập Tôi đã gặp rắc rối để gỡ lỗi sau khi vượt qua hơn 12 đối số.
  • bước duy nhất trên doScript là sự cố

Ngoài ra, như bạn thấy, xử lý lỗi khác nhau. Giữ một mắt trên trường hợp ngoại lệ ...

Các vấn đề liên quan