如何从 Swift 运行 JXA?

jl3*_*303 6 swift javascript-automation

如果我有一个带有 JXA 源代码的字符串变量,有没有办法从 swift 运行它?看来 NSAppleScript 只适用于 AppleScript 源。

bac*_*avy 7

以下示例展示了如何使用 Swift 中的 OSAKit 来运行存储在字符串中的 JavaScript for Automation 脚本:

import OSAKit
let scriptString = "Math.PI";
let script = OSAScript.init(source: scriptString, language: OSALanguage.init(forName: "JavaScript"));
var compileError : NSDictionary?
script.compileAndReturnError(&compileError)
if let compileError = compileError {
    print(compileError);
    return;
}
var scriptError : NSDictionary?
let result = script.executeAndReturnError(&scriptError)
if let scriptError = scriptError {
    print(scriptError);
}
else if let result = result?.stringValue {
    print(result)
}
Run Code Online (Sandbox Code Playgroud)

此 Swift 代码改编自Hammerspoon 源代码 (Objective-C)。


小智 -5

为什么?JXA 从各方面来说都是一只狗。如果您只想运行 JS 代码,JavaScriptCore Obj-C API 更加干净和简单。如果您想控制“AppleScriptable”应用程序,请使用 AppleScript\xe2\x80\x94it\ 这是唯一官方支持的\xe2\x80\xa0 选项,可以正常工作。

\n\n

(\xe2\x80\xa0 有 SwiftAutomation,但 Apple 还没有上钩,考虑到 Apple 对 Mac Automation 的长期管理不善,我自己也不愿意支持它。我们将看看 WWDC17 会发生什么。 )

\n