7

In Yosemite ist es jetzt möglich, JavaScript for automation sowie Applescript zu verwenden. Ich habe Probleme mit bestimmten StandardAdditions-Befehlen. Z.B. aus der Anwendung Kontakte kann ich displayAlert, aber nicht displayNotification verwenden. Beide sind im StandardsAdditions-Wörterbuch enthalten. Wenn ich diese Befehle über den ScriptEditor ausführe, bekomme ich diese Probleme nicht.Javascript für Automation (OSA) Yosemite: Privileg Fehler für bestimmte StandardAddition Befehle

Für die Befehle, die fehlschlagen, bekomme ich zur Laufzeit: Fehler -10004: Eine Zugriffsverletzung trat auf.

Beispielcode in 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. 

Wenn den entsprechenden Code in Apple mit ich Privileg Verletzungsfehler nicht: obwohl

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

Was ich in diesem Fall bemerken ist, dass die Kontakte Alarm zeigt sich mit dem Kontakte Symbol (und Kontakte App ist aktiviert), aber die Kontakte Benachrichtigung zeigt mit dem Skript Editor Symbol (und die Kontakte App ist nicht aktiviert).

Verwenden von Yosemite 10.10. Ist das ein Fehler oder fehlt mir etwas?

+1

Ich bekomme das gleiche Ergebnis mit Apples Beispiel-Snippet von der Doc-Seite (unter "Scripting Additions"), wenn ich ".currentApplication()" (dh Skript-Editor) durch etwas anderes ersetzen. Ich nehme an, dass dies absichtlich ist (kann nicht dazu führen, dass eine andere App Dinge "sagt"?), Aber ich wünschte, es wäre mit Begründung dokumentiert. –

+0

Wenn dies der Fall wäre, sollten der Dialog und die Warnung in ähnlicher Weise eingeschränkt werden. "Mail benötigt Ihr Passwort" als Dialog ist weitaus gefährlicher. –

+0

Ein Teil des Kommentars von @BenZotto gibt die praktische Antwort: Benutzer 'Application.currentApplication()' anstelle einer anderen Anwendung, um 'displaynotification()' auszuführen. –

Antwort

1

Der Grund ist, dass AppleScript Vererbung verwendet. Sie können jeder Anwendung mitteilen, dass sie eine Benachrichtigung anzeigen soll. Der Aufruf wird jedoch an die Hierarchie zum Skript-Editor (oder einem Skript-Applet) weitergeleitet, der die Nachricht versteht. Die JavaScript-Implementierung unterstützt meines Wissens keine Vererbung. Ich bin nicht sehr versiert in der JavaScript-Seite der OSA-Welt. :)

tl; dr: Kontakte können nicht wirklich tun, was Sie versuchen, es zu tun, es funktioniert nur in AppleScript, weil AppleScript so erstaunlich ist. :)

Wenn Sie sich die Antworten im Skript-Editor anzeigen lassen, können Sie sehen, dass die Vererbung live erfolgt.

+0

Warum funktioniert es für 'app.displayAlert()', aber nicht für 'app.displayNotification()'? – wivku