在约塞米蒂中,现在可以使用用于自动化的JavaScript和Applescript。我在某些StandardAdditions命令上遇到了问题。例如,在联系人应用程序中,我可以使用displayAlert,但不能使用displayAlert两者都在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 (!)但在这种情况下,我注意到的是,Contact显示的是联系人图标(联系人应用程序被激活),但Contact显示的是脚本编辑器图标(联系人应用程序未激活)。
使用约塞米蒂10.10。这是窃听器还是我漏掉了什么?
发布于 2015-03-16 02:21:48
原因是AppleScript正在使用继承。您可以告诉任何应用程序“显示通知”,但是调用最终会被传递到理解消息的脚本编辑器(或脚本applet)的层次结构中。据我所知,JavaScript实现不支持继承。我对OSA世界的JavaScript方面不太熟悉。:)
tl;dr:联系人实际上不能做你想要做的事情,它在AppleScript中是有效的,因为AppleScript太棒了。:)
如果您查看脚本编辑器中的回复日志,您可以看到继承是实时发生的。
https://stackoverflow.com/questions/26888523
复制相似问题