3

Ich versuche, die neue JavaScript Automation feature in OS X (10.11) zu verwenden, um eine Anwendung zu skripten, die kein Wörterbuch bietet. Ich habe ein Applescript, die mit dieser Anwendung mit rohem Apple Event, wie interagiert so:Senden und Empfangen "roher" Apple Events von JavaScript auf OS X (El Capitan)

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

Nun meine Frage ist: Wie übersetze ich das JavaScript? Ich kann keine Informationen über die Javascript-OSA-API finden, um rohe Apple-Ereignisse zu senden und zu empfangen.

Eine mögliche Problemumgehung könnte call a piece of AppleScript through the shell sein, aber ich würde lieber mit einer "echten" API arbeiten.

Antwort

1

Sie können zumindest etwas schneller als ein Shell-Skript Telefonieren von OSAKit in ein paar Helfern Funktionen:

// 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 + '»'; 
} 

die Sie dann erlauben schreiben Funktionen wie:

// 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] : []); 
} 

und

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

Fuller Reihe von Beispielen hier: JavaScript wrappers for Bookends functions