Search code examples
javascriptincludeadoberequireadobe-indesign

How to require or include scripts in indesign?


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.


Solution

  • Three options: import, app.doScript, and $.evalFile. I prefer $.evalFile. See app.doScript vs $.evalFile

    Working Example:

    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.

    Explanation:

    1. Script 1 creates and executes an anonymous function to avoid polluting the global namespace. If it didn't do this, sFullName would be global.
    2. Script 1 executes Script 2.
    3. Script 2 creates an object and stores it to the global variable g_script2.
    4. Script 1 calls the 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.
    5. The combineName function is run, and returns a string.
    6. Script 1 prints the name, then returns "Success". Since that's the last object on the stack, it is returned as the script result.