如果我有一个带有JXA源代码的字符串变量,有没有办法从swift运行它?似乎NSAppleScript仅适用于AppleScript源。
答案 0 :(得分:0)
以下是一个示例,说明如何使用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)
}
此Swift代码改编自the Hammerspoon source code (Objective-C).
答案 1 :(得分:-3)
为什么呢? JXA在各方面都是一只狗。如果您只想运行JS代码,那么JavaScriptCore Obj-C API更简洁,更容易。如果你想控制" AppleScriptable"应用程序然后使用AppleScript - 它是唯一正常支持的†选项,它正常工作。
(†有SwiftAutomation,但苹果没有被咬过,而且由于Apple长期以来对Mac Automation的管理不善,我自己并不倾向于支持它。我们会看到发生了什么WWDC17。)