2017-10-08 21 views
0

JavaScript로 작성된 스크립트가 있습니다.이 스크립트는 AppleScript의 작은 조각 하나를 실행해야합니다 (JS에서 기본적으로 여러 가지 요인으로 인해 구현할 수없는 기능을 일부 구현했습니다).MacOS의 자동화 스크립트 용 JXA/JavaScript에서 인라인 AppleScript를 어떻게 실행합니까?

단일 문자열 인수를 사용할 수 있어야하며, 거의 한 말을 분명히 말해야합니다.

자바 스크립트에서이 나노 프로그램을 문자열로 조합 한 다음 실행을 위해 AppleScript 환경에 문자열을 전달할 수 있습니까?

Applescript에서 JavaScript를 실행하는 방법에 대한 온라인 설명은 많이 있지만 다른 방식으로는 많이 나오지 않습니다.

실현 가능성을 높이기 위해 osascript -e의 쉘 호출을 포함하거나 더 깨끗한 JXA-ey 방법이 필요합니까?

답변

0

표준 추가 'run script 명령을 사용하십시오.

(BTW, 내 표준 권장 사항은 응용 프로그램 자동화를 위해 AppleScript를 사용하는 것입니다. JXA의 다양한 버그, 결함 및 생략은 출시되기 전에 알려졌으며 Apple은 자동화 팀이 제거되었습니다. 어쨌든 전체 Mac 자동화 플랫폼이 죽어 버렸지 만 적어도 AppleScript는 JXA보다 느린 비트율을 유지해야합니다. with).

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' 
    ); 
})();