Un ghid pentru începători pentru JXA, scripting pentru aplicații JavaScript

Dacă ați făcut vreodată vreun script pe Mac, probabil că ați văzut-o AppleScript. AppleScript a fost standardul de facto pentru interconectarea aplicațiilor împreună și pentru interfața cu utilizatorii de scripting. 

De cand OS X 10.10 Yosemite, există un al doilea limbaj de scripting pentru interfața de utilizator scripting: JavaScript pentru automatizare (JXA)

În acest tutorial, vă ajut să învățați această alternativă AppleScript cu câteva exemple din lumea reală.

Rularea JXA

Există multe modalități de a rula a JXA script-ul. Modul standard de a rula scriptul JXA este cu Script Editor care face parte din sistemul de operare.

Setarea editorului script pentru JavaScript (JXA)

Cu caseta listă din colțul din stânga sus, sub butonul de oprire, setați la JavaScript in loc de AppleScript, aveți o plină JavaScript interpret. Pentru a accesa aplicația curentă de scripting, adăugați următoarele rânduri:

// // Obțineți aplicația curentă și configurați-o // pentru scripting. // var app = Application.currentApplication (); app.includeStandardAdditions = true;

Prima linie va primi obiectul JXA pentru ca aplicația să ruleze codul. A doua linie vă permite să adăugați casete de dialog și alte bunuri la acel obiect de aplicație. 

Acum adăugați acest lucru la scenariu:

Trimite un mesaj utilizatorului. // app.displayAlert ("Acesta este un mesaj");
Exemplu de mesaj

Când executați acest lucru, acesta va afișa un dialog de mesaj cu textul "Acesta este un mesaj".

Dacă doriți să selectați dintr-o listă de articole, adăugați următoarele:

Permite utilizatorului să aleagă dintr-o listă. // var lang = app.chooseFromList (['JavaScript', 'AppleScript', 'JXA'], withPrompt: 'Care este limbajul tău preferat?'); app.displayNotification (lang, withTitle: 'Language Chooser', subtitlul: 'Alegerea ta este ...');

chooseFromList () funcția ia o serie de șiruri de caractere și un obiect opțional cu opțiuni de configurare. withPrompt configurare vă permite să setați textul afișat deasupra listei de șiruri de caractere. Șirul selectat va fi returnat.

displayNotification () funcția este apoi utilizată pentru a afișa o notificare cu informațiile furnizate utilizatorului. Puteți seta titlul și subtitrarea notificării cu obiectul de configurare.

Exemplu de selecție pentru listă

Când apăsați butonul de derulare (triunghiul din partea dreaptă din bara de instrumente), alegeți limba de programare preferată în dialog.

Anunțul este afișat

Când selectați unul, cum ar fi JXA, selecția dvs. este afișată apoi într-un popup de notificare. Dacă utilizatorul selectează anularea în dialog, rezultatul returnat va fi Boolean False.

Dacă trebuie să obțineți informații de la utilizator, utilizați displayDialog () funcţie. Cu această funcție, trebuie să o numiți într-un încearcă să prinzi structură, deoarece dacă utilizatorul apasă butonul de anulare, acesta va arunca o eroare. Introduceți codul următor:

// // Obțineți informații tastate de utilizator. // try var age = app.displayDialog ('Ce varsta ai?', defaultAnswer: ""); app.displayNotification (age.textReturned + 'de ani!', withTitle: 'Sunteți Câți ani?');  captură (e) app.displayNotification ("Utilizatorul a fost anulat", withTitle: 'Error'); 
Obținerea de intrare de la utilizator

Prin executarea acestui cod, vi se va solicita vârsta într-un prompt. Când introduceți o vârstă și faceți clic pe OK, va apărea o notificare care vă întreabă numele. Dacă apăsați Cancel (Anulare), se va afișa o notificare cu textul Error Error User Anulat.

Un exemplu clasic

Exemplul clasic de automatizare a programelor este de a deschide iTunes, și să cânți o melodie. Într-un fișier nou numit iTunesScript.scpt, adăugați următorul cod:

// // Obțineți un obiect de aplicație pentru iTunes. // var itune = Cerere ("iTunes"); itune.activate (); // // Canta o melodie. // itune.play (); // // Pentru a întrerupe: // itune.pause () // // Pentru a opri: // itune.stop () // // // Obțineți informații despre piesa curentă. // var track = itune.currentTrack () var info = track.name () + "-" + track.artist () + "-" + track.album () + "-" + track.duration; // Afișează informațiile utilizatorului. // var app = Application.currentApplication (); app.includeStandardAdditions = true; app.displayNotification (info, withTitle: 'iTunes Song'); 

Acest script va reda piesa curentă în iTunes și afișați numele, artistul, albumul și durata melodiilor într-o notificare.

iTunes Script

Elementele de bază pentru controlul unei aplicații sunt obtinerea unui obiect de aplicație, executarea metodelor obiectului pentru a obține informațiile necesare sau efectul dorit. Puteți obține informații despre fiecare metodă de aplicare a obiectelor valide din Fișier> Dicționar deschis meniu în Script Editor.

Dacă doriți să rulați scriptul pe o linie de comandă, ați tasta această comandă într-o fereastră terminală:

osascript -l JavaScript iTuneScript.scpt

-L JavaScript spune osascript că script-ul folosește JXA.

JXA în Alfred

În fișierul de descărcare zip, veți găsi QuickEditJXA.alfredworkflow Alfred 3 flux de lucru.

Acest flux de lucru vă permite să copiați o selecție într-un singur program, să inserați un alt program pe care îl configurați în prealabil și apoi să copiați modificările înapoi la programul original. 

Acesta este un flux de lucru foarte util, care economisește mult timp. Editorul meu preferat pentru efectuarea acestor modificări rapide este TextWell.

Alfred Workflow: Editare rapidă în JXA

Setul verde de blocuri copiază textul deja selectat și îl plasează în editor. În Alfred, o acțiune poate fi împărțită în orice număr de lanțuri de acțiune. În acest caz, se împarte în două moduri. 

Cea mai înaltă linie de acțiune este efectuată mai întâi și apoi susține a doua linie de acțiune. Prima acțiune a liniei de sus este a JXA script:

funcția execută (argv) var query = argv [0]; // // Obțineți numele aplicației curente. // var system = Aplicație ("Evenimente de sistem"); var proc = system.processes.whose (frontmost: '=': true) nume (); return proc; 

Acest JXA script-ul va primi numele aplicației de sus din subprocesul System Events. Linia 7 primește un obiect de aplicație pe evenimentele de sistem. Linia 9 caută matricea proceselor active cu a .a cărui (din față: '=': true) comanda care găsește procesul cu prim-plan proprietate setat la adevărat. Apoi, returnează numele procesului respectiv.

A JXA script în Alfred trebuie să aibă funcția execută () care acceptă o serie de intrări. Orice returnează această funcție este transferată apoi la următorul bloc din fluxul de lucru: o comandă de scriere în fișier. Acest lucru salvează numele aplicației curente în fișier pentru a reveni la această aplicație după editare.

A doua linie de acțiune solicită următoarele JXA script:

funcția execută (argv) var editorName = argv [0]; var ed = cerere (editorName); ed.activate (); 

Numele editorului îi este transmis din trecut Arg și Vars bloc. Aplicația de editor setată de utilizator în secțiunea variabile de mediu a Flux de lucru Alfred. Linia 4 primește obiectul aplicației pentru editor și linia 5 activează editorul.

Cu privire la acțiunea pastei (blocurile purpurii), există una JXA rutină:

Funcția ObjC.import ('stdlib') execută (argv) var app = Application.currentApplication (); app.includeStandardAdditions = true; var dataDir = $ .getenv ('alfred_workflow_data'); var mâner = app.openForAccess (dataDir + "/process.txt"); var prog = app.read (mâner); var dest = Aplicație (prog.trim ()); dest.activate (); întoarcere "; 

Linia 1 include stdlib care este biblioteca obiectivului C pentru accesul standard la sistem. JXA vă permite să utilizați orice bibliotecă care este pe sistem pentru a fi utilizată în scenariile dvs. Puteți scrie literalmente o aplicație completă în doar JXA!

Liniile 4-5 primesc obiectul aplicațiilor actuale și le fixează pentru scripting. Linia 7 utilizează stdlib pentru a obține setarea variabilei de mediu prin Alfred: alfred_workflow_data. Această variabilă de mediu dă calea spre directorul de date pentru fluxul de lucru curent. 

Linia 9 deschide fișierul process.txt în directorul de date al fluxului de lucru și linia 10 citește conținutul acestuia. Liniile 12-13 aduc aplicația în față.

Odată ce aplicația inițială se află pe partea frontală, o întârziere așteaptă ca sistemul de operare să ajungă din urmă, iar apoi fluxul de lucru se rezolvă a cmd-v pentru ao lipi în aplicație.

Versiunea originală a acestui flux de lucru a făcut uz de PHP și AppleScript. Prin utilizarea JXA, această versiune a fluxului de lucru funcționează mult mai rapid și mai fiabil. În mod similar, puteți folosi JXA și în alte programe. Tastatura Maestro, Căprui, și TextSoap, prin utilizarea unui Automator script, doar pentru a numi câteva.

Citirea în continuare

Puteți găsi mai multe informații despre JXA din aceste site-uri web:

  • Note de dezvoltatori Apple pe JavaScript pentru automatizare
  • Cartea de bucate JXA
  • Dan Thomas 'exemple JXA și rutine utile
  • Tastatură Maestro Wiki pe JXA

Concluzie

În acest tutorial, v-am arătat cum să faceți uz JXA în Script Editor, în linia de comandă și într-un rând Alfred flux de lucru. Acum că știți cum să utilizați JXA pe calculatorul dvs. Mac, aveți posibilitatea să creați câteva scripturi utile pentru automatizarea sarcinilor. 

Anunță-mă, în comentariile de mai jos, ce creați.