2017-10-08 15 views
0

私はJavaScriptで書かれたスクリプトを持っています。これは、AppleScriptの小さな断片を実行する必要があります(私はJSの多くの要因のため実装できませんでした)。JXA/JavaScriptのインラインApplescriptをMacOSのオートメーションスクリプトで実行するにはどうすればよいですか?

これは、単一の文字列引数を取ることができるはずであり、かなり多くの1つのライナーです。

JavaScriptでこのナノプログラムを文字列としてアセンブルしてから、その文字列をAppleScript環境に渡して実行することはできますか?

ApplescriptからJavaScriptを実行する方法については、多くの説明がありますが、それほど多くはありません。

これはおそらく、シェルを呼び出してosascript -eを実行するか、よりクリーンなJXA-eyの方法がありますか?

答えて

0

Standard Additionsのrun scriptコマンドを使用してください。

(私の標準では、アプリケーションの自動化のためにAppleScriptを使用することを推奨しています.JXAのさまざまなバグ、不具合、省略などは出荷前でも判明していました。 Macromediaの全自動化プラットフォームは死にましたが、少なくともAppleScriptはJXAよりも遅くなるでしょう。 )

0

ここには、ES6(Sierra以降)macOS用のevalAS関数があります。

(() => { 
    'use strict'; 

    // evalAS :: String -> IO String 
    const evalAS = s => { 
     const 
      a = Application.currentApplication(), 
      sa = (a.includeStandardAdditions = true, a); 
     return sa.doShellScript(
      ['osascript -l AppleScript <<OSA_END 2>/dev/null'] 
      .concat([s]) 
      .concat('OSA_END') 
      .join('\n') 
     ); 
    }; 

    return evalAS('tell application \"Finder\" to the clipboard'); 

})(); 

シェルアプローチの利点は、単に評価環境でスクリプトの追加が自動的に利用できることです。

我々はevalSAの以下の別の定義を使用している場合は、我々は明示的に私たちの表現の文字列を付加する必要がある「使用スクリプティング機能追加\ n」の

(() => { 
    'use strict'; 

    // evalAS2 :: String -> IO a 
    const evalAS2 = s => { 
     const a = Application.currentApplication(); 
     return (a.includeStandardAdditions = true, a) 
      .runScript(s); 
    }; 

    return evalAS2(
     'use scripting additions\n\ 
     tell Application "Finder" to the clipboard' 
    ); 
})(); 
関連する問題