ぼんやりDTP

DTPに関係したりしなかったりするぼんやりとした話をなんとなく。

Macの自動化用のJavaScript for Automation (JXA)

Macの自動化用のJavaScript for Automation (JXA)について。

AppleScriptだとAcrobatとのアクセント付きアルファベットのテキストの受け渡しで問題があったのでJavaScriptエンコードするなどしてどうにかならないかと試す。

AppleScriptでデコードしてもいいかもしれないが、コードを流用したいのでJavaScriptで統一したい。

既存のAppleScriptをいいように変換してほしいがそうもいかないので、ちまちまとググりながらやるしか無いようだ。

しかしながら……、

実際JXAで作りたいものはできたが、InDesign上でそもそもJXAのスクリプトが実行できないので、JavaScript上でURLエンコードしてAppleScript上でデコードするスクリプトに落ち着いた。

  1. encodeURI() - JavaScript | MDN
  2. AppleScript でURLエンコード・デコード - Qiita

  3. URIで使用できる文字 - CyberLibrarian

  4. ASCIIのURLエンコード対応表チートシート&変換ツール

サンプルコード

//Finderで選択しているファイル名を表示する.scpt
var Finder = new Application("Finder");
Finder.includeStandardAdditions = true; //標準機能拡張(StandardAdditions.osax)を使用する
var selectedItems = Finder.selection();
var selectedItemsNames = [];
for (var i=0; i<selectedItems.length; i++) {
    selectedItemsNames.push(selectedItems[i].name());
}
Finder.displayAlert(selectedItemsNames.join(", "));

補足

  1. 行末のセミコロンは無くても動く。
  2. ライブラリの用語説明に載っているプロパティーは後ろに「.()」をつけてメソッドとして使用する場合がある。
    1. 例)「name (text) : the name of the item」 → name.()
  3. ダイアログ等を出したい時は「標準機能拡張(StandardAdditions.osax)」を使用する。

公式ドキュメント

テキストの読み込み

  1. JXA でテキストファイルを読み書きする四つの方法 - Qiita

    app.write() app.read()文字コードを指定する事が出来ない。日本語環境で実行した場合は MacEncoding(Shift_JIS) で処理される。

  2. JavaScript for Automation (JXA)でUTF-8テキストの読み書き: kanzメモ doShellScirptを使用する例が紹介されている。

文字列のUnicodeエスケープ

  1. Unicode Escape Sequence 変換ツール | 二代目俺のメモ
  2. Unicodeエスケープ - sawatの日記

スクリプトのフォルダーのパスを取得

その他参照ページ