我有一个用JavaScript编写的脚本,需要运行一小段AppleScript(以实现一些我无法实现的功能,因为JS本身有很多因素)。
它应该能够采用单个字符串参数,并且几乎是一个告诉最终的一个班轮。
是否可以在JavaScript中将此纳米程序组装为字符串,然后将字符串传递给AppleScript环境以执行,以及如何完成?
网上有很多关于如何从Applescript运行JavaScript的解释,但不是那么多。
这很可能会涉及到osascript -e
的shell调用来实现,还是更清洁,更多的JXA-ey方式?
答案 0 :(得分:1)
这是ES6(Sierra onwards)macOS的evalAS功能。
(() => {
'use strict';
// evalAS :: String -> IO String
const evalAS = s => {
const
a = Application.currentApplication(),
sa = (a.includeStandardAdditions = true, a);
return sa.doShellScript(
['osascript -l AppleScript <<OSA_END 2>/dev/null']
.concat([s])
.concat('OSA_END')
.join('\n')
);
};
return evalAS('tell application \"Finder\" to the clipboard');
})();
shell方法的优点很简单,即在评估环境中自动提供脚本添加。
如果我们使用evalSA的以下替代定义,我们需要使用'use scripting additions \ n'
显式地添加我们的表达式字符串(() => {
'use strict';
// evalAS2 :: String -> IO a
const evalAS2 = s => {
const a = Application.currentApplication();
return (a.includeStandardAdditions = true, a)
.runScript(s);
};
return evalAS2(
'use scripting additions\n\
tell Application "Finder" to the clipboard'
);
})();
答案 1 :(得分:0)
使用标准添加'run script
命令。
(顺便说一下,我的标准建议是坚持使用AppleScript进行应用程序自动化,因为它是唯一可以正常使用的[支持]选项.JXA的各种错误,缺陷和遗漏在发货之前都已知道,而且Apple无法'那时候很难解决它们,所以现在自动化团队已经被淘汰了,它们肯定不会被修复。整个Mac自动化平台无论如何都要死了,但至少AppleScript应该比JXA慢,这从来都不是正确的。 。)