7

In Yosemite ora è possibile utilizzare JavaScript for automation così come Applescript. Ho problemi con alcuni comandi di StandardAdditions. Per esempio. dall'applicazione Contatti posso utilizzare displayAlert, ma non displayNotification. Entrambi sono nel dizionario StandardsAdditions. Quando eseguo questi comandi tramite ScriptEditor, non ho questi problemi.Javascript per l'Automazione (OSA) Yosemite: privilegio di errore per certo StandardAddition comandi

Per i comandi che non riesco a ottenere in fase di esecuzione: Errore -10004: si è verificata una violazione dei privilegi.

codice di esempio nella 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. 

Quando si utilizza il codice equivalente in AppleScript non ottengo errori di violazione di privilegio:

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

Quello che ho notato in questo caso è però che l'avviso Contatti venga visualizzato con l'icona Contatti (e Applicazione Contatti è attivato), ma i contatti notifica presenta con Script Editor icona (e l'applicazione Contatti non è attivato).

Utilizzo di Yosemite 10.10. Si tratta di un bug o mi sto perdendo qualcosa?

+1

ottengo lo stesso risultato utilizzando frammento di esempio di Apple dalla pagina di documento (in "Scripting Additions") se sostituisco '.currentApplication()' (cioè Script Editor) con qualsiasi altra cosa. Presumo che questo sia intenzionale (non può causare un'altra app per "dire" cose?) Ma vorrei che fosse documentata con logica. –

+0

In tal caso, la finestra di dialogo e l'avviso dovrebbero essere limitati allo stesso modo. "Mail richiede la tua password" come una finestra di dialogo è molto più pericoloso. –

+0

Parte del commento di @BenZotto fornisce la risposta pratica: User 'Application.currentApplication()' invece di un'altra applicazione per eseguire 'displayNotification()'. –

risposta

1

Il motivo è che AppleScript utilizza l'ereditarietà. È possibile dire a qualsiasi applicazione di "visualizzare la notifica", ma la chiamata finisce per passare la gerarchia a Script Editor (o applet di script) che capisce il messaggio. L'implementazione JavaScript non supporta l'ereditarietà a mia conoscenza. Non sono molto esperto nel lato JavaScript del mondo OSA. :)

tl; dr: Contatti non possono in realtà fare ciò che si sta cercando di fargli fare, solo che funziona in AppleScript perché AppleScript è che sorprendente. :)

Se si guardano le risposte log-in Script Editor, si può vedere l'eredità accadere dal vivo.

+0

Perché funziona per 'app.displayAlert()' ma non per 'app.displayNotification()'? – wivku