8

別のスクリプトファイルをロードして、そのファイルでメソッドを実行するにはどうすればよいですか?

InDesign javascriptを使用していますが、同じスクリプトに複数のファイルを含める方法がわかりません。

4

2 に答える 2

10

3つのオプション:import、app.doScript、および$.evalFile。私は$.evalFileが好きです。app.doScriptと$.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;
    }
};

script2.jsxがCドライブのルートにない場合は、スクリプト1を実際の場所に変更します。

説明:

  1. スクリプト1は、グローバル名前空間の汚染を回避するために無名関数を作成して実行します。これを行わなかった場合、sFullNameグローバルになります。
  2. スクリプト1はスクリプト2を実行します。
  3. スクリプト2はオブジェクトを作成し、それをグローバル変数に格納しますg_script2
  4. スクリプト1はcombineNameスクリプト2のメソ​​ッドを呼び出します。ここで重要なのは、スクリプトのすべてのファイルが同じグローバル名前空間を共有することです。これがスクリプト1のアクセス方法ですg_script2。ただし、これは、この例のようにグローバルオブジェクト内に保持されていない限り、2つのファイルが関数または変数に同じ名前を付けてはならないことも意味します。
  5. combineName関数が実行され、文字列が返されます。
  6. スクリプト1は名前を出力してから、「Success」を返します。これがスタックの最後のオブジェクトであるため、スクリプトの結果として返されます。
于 2013-03-06T21:26:37.453 に答える
4

ExtendScriptは、外部スクリプトを含めるためのプリプロセッサディレクティブを提供します。このディレクティブは、ターゲットファイルの内容をステートメントの場所にある現在のスクリプトファイルに挿入します。したがって、ステートメントの後で、現在のスクリプトのメソッドのように任意のメソッドを呼び出すことができます。

#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();
于 2015-09-09T07:28:33.293 に答える