8

Yosemite では、自動化に Applescript だけでなくJavaScriptも使用できるようになりました。特定の 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.

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 (!)

その場合、連絡先アラート連絡先アイコンで表示されますが (連絡先アプリが有効になっています)、連絡先通知スクリプト エディターアイコンで表示されます (連絡先アプリは有効になっていません)。

Yosemite 10.10 を使用。これはバグですか、それとも何か不足していますか?

4

1 に答える 1

1

その理由は、AppleScript が継承を使用しているためです。任意のアプリケーションに「通知を表示する」ように指示できますが、呼び出しは、メッセージを理解するスクリプト エディター (またはスクリプト アプレット) に階層を渡されてしまいます。私の知る限り、JavaScript の実装は継承をサポートしていません。私は、OSA の世界の JavaScript 側に精通しているわけではありません。:)

tl;dr: 連絡先は、あなたがやろうとしていることを実際に行うことはできません. :)

Script Editor で返信ログを見ると、継承がライブで行われていることがわかります。

于 2015-03-16T02:21:48.770 に答える