8

在 Yosemite 中,现在可以使用JavaScript和 Applescript 进行自动化。我在使用某些 StandardAdditions 命令时遇到问题。例如,从联系人应用程序我可以使用displayAlert,但不能使用displayNotification。两者都在 StandardsAdditions 字典中。通过 ScriptEditor 运行这些命令时,我没有遇到这些问题。

对于我在运行时得到的失败命令:Error -10004: A privilege violation occurred

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。这是一个错误还是我错过了什么?

4

1 回答 1

1

原因是 AppleScript 使用继承。您可以告诉任何应用程序“显示通知”,但调用最终会向上传递到理解消息的脚本编辑器(或脚本小程序)。据我所知,JavaScript 实现不支持继承。我对 OSA 世界的 JavaScript 方面并不是很精通。:)

tl;dr:联系人实际上不能做你想做的事,它只能在 AppleScript 中工作,因为 AppleScript 真是太棒了。:)

如果您查看脚本编辑器中的回复日志,您可以看到继承发生在现场。

于 2015-03-16T02:21:48.770 回答