wiv*_*vku 7 javascript applescript osx-yosemite javascript-automation
在Yosemite中,现在可以使用JavaScript进行自动化以及Applescript.我在使用某些StandardAdditions命令时遇到问题.例如,从Contacts应用程序,我可以使用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.
Run Code Online (Sandbox Code Playgroud)
在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 (!)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我注意到,"联系人" 警报显示" 联系人"图标(并且"联系人"应用程序已激活),但"联系人" 通知显示" 脚本编辑器"图标(并且未激活"联系人"应用程序).
使用优胜美地10.10.这是一个错误还是我错过了什么?
原因是 AppleScript 使用继承。您可以告诉任何应用程序“显示通知”,但调用最终会沿着层次结构传递到理解该消息的脚本编辑器(或脚本小程序)。据我所知,JavaScript 实现不支持继承。我不太熟悉 OSA 世界的 JavaScript 方面。:)
tl;dr:联系人实际上无法实现您想要实现的功能,它只能在 AppleScript 中运行,因为 AppleScript 太神奇了。:)
如果您在脚本编辑器中查看回复日志,您可以看到继承是实时发生的。