Как запустить встроенный Applescript из скрипта JXA/JavaScript для автоматизации на macOS?
У меня есть скрипт, написанный на JavaScript, который должен запускать один маленький кусочек AppleScript (для достижения некоторой функциональности, которую я не смог реализовать из-за ряда факторов, изначально присутствовавших в JS).
Он должен быть в состоянии принимать один строковый аргумент и в значительной степени говорит о том, что в нем содержится одна строка.
Можно ли собрать эту нанопрограмму как строку в JavaScript, а затем передать строку в среду AppleScript для выполнения, и как это будет сделано?
В Интернете есть множество объяснений о том, как запустить JavaScript из Applescript, но не так уж и много другого.
Будет ли это - по всей вероятности - включать вызов оболочки osascript -e
достичь или есть более чистые, более JXA-е пути?
2 ответа
Вот функция evalAS для Mac OS ES6 (далее Sierra).
(() => {
'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');
})();
Преимущество подхода оболочки заключается в том, что дополнения сценариев автоматически доступны в среде оценки.
Если мы используем следующее альтернативное определение evalSA, нам нужно явно предвосхитить нашу строку выражения с помощью 'use дополнений сценариев \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'
);
})();
Используйте стандартные дополнения " run script
команда.
(Кстати, моя стандартная рекомендация - придерживаться использования AppleScript для автоматизации приложений, так как это единственный [поддерживаемый] вариант, который работает правильно. Различные ошибки, недостатки и упущения JXA были известны еще до его поставки, и Apple не могла быть обеспокоена чтобы исправить их тогда, так что они, конечно, не будут исправлены, теперь команда Automation была ликвидирована. Вся платформа Mac Automation все равно умирает, но по крайней мере AppleScript должен работать немного медленнее, чем JXA, что никогда не было правильным с самого начала.)