3

OS X(10.11)の新しいJavaScript Automation featureを使用して、辞書を提供しないアプリケーションをスクリプト化しようとしています。OS X(El Capitan)上のJavaScriptから "生の" Appleイベントを送受信する

tell application "Bookends" 
    return «event ToySSQLS» "authors REGEX 'Johnson' " 
end tell 

今私の質問は:どのように私はJavaScriptにこれを翻訳しないので、は次のように私は、生のアップルイベントを使用して、そのアプリケーションと対話するAppleScriptを持っていますか? Appleの未加工イベントを送受信するJavascript OSA APIに関する情報が見つかりません。

可能な回避策の1つはcall a piece of AppleScript through the shellですが、実際のAPIを使用することをお勧めします。

答えて

1

あなたは、少なくともヘルパー関数のカップルでOSAKitを使用して、シェルスクリプトの呼び出しよりも速く何かを行うことができます:

// sqlMatchIDs :: String -> [String] 
function sqlMatchIDs(strClause) { 
    // SELECT clause without the leading SELECT keyword 
    var strResult = evalOSA(
     '', eventCode('SQLS') + 
     ' "' + strClause + '"' 
    ); 

    return strResult.indexOf('\r') !== -1 ? (
     strResult.split('\r') 
    ) : (strResult ? [strResult] : []); 
} 

とを:あなたはのような関数を書くことができ

// evalOSA :: String -> String -> IO String 
function evalOSA(strLang, strCode) { 

    var oScript = ($.OSAScript || (
      ObjC.import('OSAKit'), 
      $.OSAScript)) 
     .alloc.initWithSourceLanguage(
      strCode, $.OSALanguage.languageForName(strLang) 
     ), 
     error = $(), 
     blnCompiled = oScript.compileAndReturnError(error), 
     oDesc = blnCompiled ? (
      oScript.executeAndReturnError(error) 
     ) : undefined; 

    return oDesc ? (
     oDesc.stringValue.js 
    ) : error.js.NSLocalizedDescription.js; 
} 

// eventCode :: String -> String 
function eventCode(strCode) { 
    return 'tell application "Bookends" to «event ToyS' + 
     strCode + '»'; 
} 

ここでは例の

sqlMatchIDs("authors like '%Harrington%'") 

フラーのセットのように呼び出します:JavaScript wrappers for Bookends functions

関連する問題