gpt4 book ai didi

javascript - 在 OS X (El Capitan) 上从 JavaScript 发送和接收 "raw"Apple 事件

转载 作者:行者123 更新时间:2023-11-29 15:28:49 30 4
gpt4 key购买 nike

我正在尝试使用新的 JavaScript Automation feature在 OS X (10.11) 中编写不提供字典的应用程序的脚本。我有一个 AppleScript,它使用原始 Apple 事件与该应用程序交互,如下所示:

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

现在我的问题是:如何将其转换为 JavaScript?我找不到有关发送和接收原始 Apple 事件的 Javascript OSA API 的任何信息。

一个可能的解决方法是 call a piece of AppleScript through the shell ,但我更愿意使用“真正的”API。

最佳答案

通过在几个辅助函数中使用 OSAKit,您至少可以比 shell 脚本调用更快:

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

和电话一样

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

这里有更完整的示例集:JavaScript wrappers for Bookends functions

关于javascript - 在 OS X (El Capitan) 上从 JavaScript 发送和接收 "raw"Apple 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36728791/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com