В Yosemite теперь можно использовать JavaScript для автоматизации а также Applescript. У меня проблемы с некоторыми командами StandardAdditions. Например. из приложения «Контакты» я могу использовать displayAlert, но не displayNotification. Оба находятся в словаре StandardsAdditions. При запуске этих команд через ScriptEditor у меня не возникает этих проблем.
Для неудачных команд я получаю во время выполнения: Ошибка -10004: Произошло нарушение привилегий.
Пример кода на JavaScript:
ScriptEditor = Application("Script Editor");
ScriptEditor.includeStandardAdditions = true;
app = Application("Contacts"); // or e.g. "Calendar", "System Events", "Finder"
app.includeStandardAdditions = true;
// -- testing: displayAlert()
ScriptEditor.displayAlert("Hello world!");
app.displayAlert("Hello world!"); // success, no privilege error
// -- testing: displayNotification()
ScriptEditor.displayNotification("Hello world!");
//app.displayNotification("Hello world!"); // Error -10004: A privilege violation occurred.
// --- testing: say()
ScriptEditor.say("Hello world!");
//app.say("Hello world"); // Error -10004: A privilege violation occurred.
// --- testing: beep()
ScriptEditor.beep(1);
//app.beep(1); // Error -10004: A privilege violation occurred.
При использовании эквивалентного кода в AppleScript я не получаю ошибок нарушения привилегий:
tell application "Script Editor" to display alert "from Script Editor" -- with Script Editor icon
tell application "Contacts" to display alert "from contacts" -- with Contacts icon
tell application "Script Editor" to display notification "from Script Editor" -- with Script Editor icon
tell application "Contacts" to display notification "from contacts" -- with Script Editor icon (!)
Что я заметил в этом случае, так это то, что оповещение о контактах отображается со значком Контакты (и приложение «Контакты» активировано), но уведомление о контактах > отображается со значком Редактора скриптов (и приложение Контакты не активировано).
Использование Йосемити 10.10. Это ошибка или я что-то упускаю?
.currentApplication()
(например, редактор сценариев) чем-либо еще. Я предполагаю, что это сделано намеренно (не может заставить другое приложение что-то говорить?), но хотелось бы, чтобы это было задокументировано с обоснованием. - person Ben Zotto   schedule 22.11.2014Application.currentApplication()
вместо другого приложения запускаетdisplayNotification()
. - person Michael Scott Cuthbert   schedule 26.06.2016