Una guida per principianti a JXA, JavaScript Application Scripting

Se hai mai fatto uno script sul Mac, probabilmente hai visto AppleScript. AppleScript è stato lo standard di fatto per l'unione di applicazioni insieme e per lo scripting dell'interfaccia utente. 

Da OS X 10.10 Yosemite, esiste un secondo linguaggio di scripting per lo scripting dell'interfaccia utente: JavaScript per l'automazione (JXA)

In questo tutorial, ti aiuterò a imparare questa alternativa a AppleScript con alcuni esempi del mondo reale.

Esecuzione di JXA

Esistono molti modi per eseguire a JXA script. Il modo standard per eseguire lo script JXA è con Script Editor questa è una parte del sistema operativo.

Script Editor impostato per JavaScript (JXA)

Con la casella di riepilogo nell'angolo in alto a sinistra, sotto il pulsante stop, impostare su JavaScript invece di AppleScript, hai un pieno JavaScript interprete. Per accedere all'attuale applicazione per lo scripting, aggiungi queste righe:

// // Scarica l'applicazione corrente e configurala // per lo scripting. // var app = Application.currentApplication (); app.includeStandardAdditions = true;

La prima riga otterrà l'oggetto JXA per l'applicazione che esegue il codice. La seconda riga ti consente di aggiungere finestre di dialogo e altri gadget a quell'oggetto dell'applicazione. 

Ora aggiungi questo alla sceneggiatura:

// // Invia un messaggio all'utente. // app.displayAlert ("Questo è un messaggio");
Esempio di messaggio

Quando lo esegui, verrà visualizzata una finestra di dialogo con il messaggio "Questo è un messaggio".

Se si desidera scegliere da un elenco di elementi, aggiungere quanto segue:

// // Consenti all'utente di scegliere da un elenco. // var lang = app.chooseFromList (['JavaScript', 'AppleScript', 'JXA'], withPrompt: 'Qual è la tua lingua preferita?'); app.displayNotification (lang, withTitle: 'Language Chooser', sottotitolo: 'La tua scelta è ...');

Il chooseFromList () la funzione accetta una serie di stringhe e un oggetto facoltativo con opzioni di configurazione. Il withPrompt l'opzione di configurazione ti consente di impostare il testo visualizzato sopra l'elenco di stringhe. La stringa selezionata sarà restituita.

Il displayNotification () la funzione viene quindi utilizzata per visualizzare una notifica con le informazioni fornite all'utente. È possibile impostare il titolo e il sottotitolo della notifica con l'oggetto di configurazione.

Esempio di selezione elenco

Quando premi il pulsante Esegui (il triangolo a punta destra nella barra degli strumenti), scegli il tuo linguaggio di programmazione preferito nella finestra di dialogo.

Notifica visualizzata

Quando ne selezioni uno, come JXA, la tua selezione viene quindi mostrata in un popup di notifica. Se l'utente seleziona annulla nella finestra di dialogo, il risultato restituito sarà Falso booleano.

Se è necessario ottenere informazioni dall'utente, utilizzare il displayDialog () funzione. Con questa funzione, è necessario chiamarlo all'interno di a prova a prendere struttura perché se l'utente preme il pulsante Annulla, genererà un errore. Digita il seguente codice:

// // Ottieni informazioni digitate dall'utente. // prova var age = app.displayDialog ('Quanti anni hai?', defaultAnswer: ""); app.displayNotification (age.textReturned + 'years old!', withTitle: 'You are How old?');  catch (e) app.displayNotification ('Utente annullato', withTitle: 'Error'); 
Ottenere input dall'utente

Eseguendo quel codice, ti verrà richiesta la tua età in un prompt. Quando si digita un'età e si fa clic su OK, verrà visualizzata una notifica che chiede il proprio nome. Se si preme Annulla, viene visualizzata una notifica con il messaggio Errore utente annullato.

Un classico esempio

Il classico esempio di automazione del programma è quello di aprire iTunes, e suona una canzone. In un nuovo file chiamato iTunesScript.scpt, aggiungi il seguente codice:

// // Ottieni un oggetto applicazione per iTunes. // var itune = Applicazione ('iTunes'); itune.activate (); // // Suonare una canzone. // itune.play (); // // Per mettere in pausa: // itune.pause () // // Per interrompere: // itune.stop () // // // Ottieni le informazioni sulla traccia corrente. // var track = itune.currentTrack () var info = track.name () + "-" + track.artist () + "-" + track.album () + "-" + track.duration (); // // Mostra le informazioni all'utente. // var app = Application.currentApplication (); app.includeStandardAdditions = true; app.displayNotification (informazioni, withTitle: 'iTunes Song'); 

Questo script riprodurrà la canzone corrente in iTunes e visualizza il nome, l'artista, l'album e la durata dei brani in una notifica.

Script iTunes

Le basi per il controllo di un'applicazione sono ottenere un oggetto applicazione, eseguire metodi dell'oggetto per ottenere le informazioni necessarie o l'effetto desiderato. È possibile ottenere informazioni sui metodi validi di ciascun oggetto dell'applicazione dal File> Apri dizionario menu nel Script Editor.

Se vuoi eseguire lo script su una riga di comando, devi digitare questo comando in una finestra di terminale:

osascript -l JavaScript iTuneScript.scpt

Il -l JavaScript dice ad un utente che lo script sta usando JXA.

JXA in Alfred

Nel file zip di download, troverai il QuickEditJXA.alfredworkflow Alfred 3 flusso di lavoro.

Questo flusso di lavoro ti consente di copiare una selezione in un programma, incollarla in un altro programma che hai impostato prima di mano, e quindi copiare le modifiche sul programma originale. 

Questo è un flusso di lavoro molto utile che consente di risparmiare un sacco di tempo. Il mio editor preferito per fare questi rapidi cambiamenti è TextWell.

Alfred Workflow: Quick Edit in JXA

Il set di blocchi verde copia il testo già selezionato e lo inserisce nell'editor. Nel Alfred, un'azione può essere suddivisa in un numero qualsiasi di altre catene di azioni. In questo, si divide in due modi. 

La prima linea d'azione viene eseguita per prima, quindi esegue il backup fino alla seconda riga di azione. La prima azione della linea superiore è a JXA script:

function run (argv) var query = argv [0]; // // Ottieni il nome dell'applicazione corrente. // var system = Application ("Eventi di sistema"); var proc = system.processes.whose (frontmost: '=': true). name (); return proc; 

Questo JXA lo script otterrà il nome dell'applicazione più in alto dal processo secondario Eventi di sistema. La riga 7 ottiene un oggetto applicazione su Eventi di sistema. La riga 9 ricerca l'array di processi attivi con a .di chi (frontmost: '=': true) comando che trova il processo con il in primo piano proprietà impostata su true. Quindi restituisce il nome di quel processo.

UN JXA script in Alfred deve avere la funzione run () che accetta un array di input. Qualunque cosa restituisca questa funzione viene quindi passata al blocco successivo nel flusso di lavoro: un comando write to file. Questo salva il nome dell'applicazione corrente sul file per tornare a questa applicazione dopo la modifica.

La seconda linea di azione chiama quanto segue JXA script:

function run (argv) var editorName = argv [0]; var ed = Application (editorName); ed.activate (); 

Il nome dell'editor viene passato dal precedente Arg e Vars bloccare. L'applicazione dell'editor impostata dall'utente nella sezione delle variabili d'ambiente del Flusso di lavoro Alfred. La riga 4 ottiene l'oggetto dell'applicazione per l'editor e Line 5 attiva l'editor.

Sull'azione Incolla (i blocchi viola) ce n'è uno JXA routine:

ObjC.import ('stdlib') function run (argv) var app = Application.currentApplication (); app.includeStandardAdditions = true; var dataDir = $ .getenv ('alfred_workflow_data'); var handle = app.openForAccess (dataDir + "/process.txt"); var prog = app.read (handle); var dest = Application (prog.trim ()); dest.activate (); ritorno "; 

La linea 1 include il stdlib che è la libreria Objective C per l'accesso standard al sistema. JXA consente di utilizzare qualsiasi libreria presente nel sistema per l'utilizzo negli script. Puoi letteralmente scrivere un'applicazione completa nel modo giusto JXA!

Le righe 4-5 ottengono l'oggetto applicazioni corrente e lo configurano per lo scripting. La linea 7 utilizza il stdlib per ottenere la configurazione della variabile di ambiente Alfred: alfred_workflow_data. Questa variabile d'ambiente dà il percorso alla directory dei dati per il flusso di lavoro corrente. 

La riga 9 apre il file process.txt nella directory dei dati del flusso di lavoro e la riga 10 legge i suoi contenuti. Le righe 12-13 portano l'applicazione in primo piano.

Una volta che l'applicazione originale è in primo piano, un ritardo attende il sistema operativo per raggiungere, e quindi i problemi del flusso di lavoro a cmd-v per incollarlo nell'applicazione.

La versione originale di questo flusso di lavoro è stata utilizzata PHP e Applescript. Usando JXA, questa versione del flusso di lavoro viene eseguita in modo molto più rapido e affidabile. Allo stesso modo, puoi usare JXA anche in altri programmi. Maestro della tastiera, nocciola, e TextSoap, con l'uso di un Automator script, solo per citarne alcuni.

Ulteriori letture

È inoltre possibile trovare ulteriori informazioni su JXA da questi siti Web:

  • Note per gli sviluppatori Apple su JavaScript per l'automazione
  • Ricettario JXA
  • Esempi di JXA di Dan Thomas e routine utili
  • Keyboard Maestro Wiki su JXA

Conclusione

In questo tutorial, ti ho mostrato come utilizzarlo JXA nel Script Editor, nella riga di comando e in un Alfred flusso di lavoro. Ora che sai come usare JXA sul tuo Mac, puoi creare degli script utili per automatizzare le attività. 

Fatemi sapere, nei commenti qui sotto, cosa create.