How do I load another script file and run a method on it?
I'm using InDesign javascript and I don't know how to include multiple files in the same script.
How do I load another script file and run a method on it?
I'm using InDesign javascript and I don't know how to include multiple files in the same script.
Three options: import, app.doScript, and $.evalFile. I prefer $.evalFile. See app.doScript vs $.evalFile
C:\script1.jsx
(function() {
$.evalFile(new File("/c/script2.jsx"));
var sFullName = g_script2.combineName("John", "Doe");
$.writeln(sFullName);
return "Success";
})();
C:\script2.jsx
g_script2 = {
combineName: function(sFirstName, sLastName) {
return sFirstName + " " + sLastName;
}
};
If script2.jsx is not located in the root of the C drive, modify script 1 with its true location.
sFullName
would be global.g_script2
.combineName
method of script 2. It is important to note here that all of the files of your script will share the same global namespace, which is how script 1 can access g_script2
. However, this also means that no two files should ever have the same name for a function or variable, unless they're kept inside a global object like in this example.combineName
function is run, and returns a string.c:/script2.jsx
instead of /c/script2.jsx
. The latter will fail if there's a folder named c
on the root drive, i.e. c:\c
. If script2.jsx
is in the same folder as script1.jsx
, you could run it with the command $.evalFile(new File((new File($.fileName)).parent.fullName + "\script2.jsx"))
. Alternatively, ExtendScript does support relative file paths, but I wouldn't recommend using them because they're not relative to the running script. –
Philibeg var root = (new File($.fileName)).parent + "/";
- it returns the path like this, however: /c/some%20folder/path
- note the lack of trailing slash, by the way. AND, using $.writeln(sFullName);
calls up the ESTK on my computer. Things work fine without that line. –
Betulaceous ExtendScript provides preprocessor directives for including external scripts. This directive inserts the contents of target file into the current script file at the location of the statement. So after the statement you will be able to call any method like it’s a method of the current script:
#target InDesign;
// Include other script file that includes a function otherScriptFileMethod
#include "otherScriptFile.jsx"
// Now you can call the method as it was written in this script file
otherScriptFileMethod();
© 2022 - 2024 — McMap. All rights reserved.