En nybegynner guide til JXA, JavaScript Application Scripting

Hvis du noen gang har gjort noen skript på Mac, så har du sannsynligvis sett det Apple. Apple har vært de facto-standarden for innsnevring av applikasjoner sammen og for brukergrensesnittskripting. 

Siden OS X 10.10 Yosemite, Det er et annet skriptspråk for brukergrensesnittskripting: JavaScript for automatisering (JXA)

I denne opplæringen hjelper jeg deg å lære dette alternativet til Apple med noen ekteeksempler.

Kjører JXA

Det er mange måter å kjøre a JXA manus. Den vanlige måten å kjøre JXA-skript på er med Script Editor det er en del av operativsystemet.

Script Editor Set for JavaScript (JXA)

Med listeboksen øverst til venstre, under stoppknappen, sett til Javascript i stedet for Apple, du har en full Javascript tolk. For å få tilgang til gjeldende program for skripting, legg til disse linjene:

// // Få det nåværende programmet og sett det opp // for scripting. // var app = Application.currentApplication (); app.includeStandardAdditions = true;

Den første linjen vil få JXA-objektet for programmet som kjører koden. Den andre linjen lar deg legge til dialogbokser og andre godbiter til det aktuelle applikasjonsobjektet. 

Legg nå dette til skriptet:

// // Send en melding til brukeren. // app.displayAlert ("Dette er en melding");
Meldingseksempel

Når du kjører dette, vil det vise en meldingsdialog med teksten "Dette er en melding".

Hvis du vil velge fra en liste over elementer, legg til følgende:

// // La brukeren velge fra en liste. // var lang = app.chooseFromList (['JavaScript', 'AppleScript', 'JXA'], withPrompt: 'Hva er ditt favoritt språk?'); app.displayNotification (lang, withTitle: 'Language Chooser', undertekst: 'Ditt valg er ...');

De ChooseFromList () funksjonen tar en rekke strenger og en valgfri gjenstand med konfigurasjonsalternativer. De withPrompt Konfigurasjonsalternativet lar deg sette teksten som vises over listen over strenger. Strengen som er valgt, kommer tilbake.

De displayNotification () funksjonen brukes da til å vise et varsel med informasjonen som leveres til brukeren. Du kan angi tittelen og underteksten til varselet med konfigurasjonsobjektet.

Eksempel på listevalg

Når du trykker på kjørknappen (den høyre spisse trekanten i verktøylinjen), velger du ditt favoritt programmeringsspråk i dialogboksen.

Varsel vist

Når du velger en, som JXA, blir ditt valg deretter vist i et popup-melding. Hvis brukeren velger avbryt i dialogboksen, vil det returnerte resultatet være den boolske falske.

Hvis du trenger å få informasjon fra brukeren, bruker du displayDialog () funksjon. Med denne funksjonen må du ringe den innen a prøv ... fange struktur fordi hvis brukeren trykker på Avbryt-knappen, vil den kaste en feil. Skriv inn følgende kode:

// // Få bruker skrevet informasjon. // Prøv var age = app.displayDialog ('Hvor gammel er du?', defaultAnswer: ""); app.displayNotification (age.textReturned + 'years old!', withTitle: 'Du er så gammel?');  fangst (e) app.displayNotification ('User Canceled', withTitle: 'Error'); 
Få inngang fra brukeren

Ved å kjøre den koden, vil du bli bedt om din alder i en ledetekst. Når du skriver en alder og klikker på OK, vil den vise et varsel om å spørre navnet ditt. Hvis du trykker på Avbryt, vises et varsel med teksten Feilbruker avbrutt vises.

Et klassisk eksempel

Det klassiske eksempelet på programautomatisering er å åpne iTunes, og spill en sang. I en ny fil som heter iTunesScript.scpt, legg til følgende kode:

// // Få et programobjekt for iTunes. // var itune = Program ('iTunes'); itune.activate (); // // Spill en sang. // itune.play (); // // For å pause: // itune.pause () // // For å stoppe: // itune.stop () // // // Få gjeldende sporinformasjon. // var spor = itune.currentTrack () var info = track.name () + "-" + track.artist () + "-" + track.album () + "-" + track.duration (); // // Vis informasjonen til brukeren. // var app = Application.currentApplication (); app.includeStandardAdditions = true; app.displayNotification (info, withTitle: 'iTunes Song'); 

Dette skriptet vil spille gjeldende sang i iTunes og vis sangene navn, artist, album og varighet i et varsel.

iTunes Script

Grunnleggende for å kontrollere et program er å få et programobjekt, utføre metoder for objektet for å få den nødvendige informasjonen eller ønsket effekt. Du kan få informasjon om hvert programobjekt gyldige metoder fra Fil> Åpne ordbok menyen i Script Editor.

Hvis du vil kjøre skriptet på en kommandolinje, skriver du denne kommandoen i et terminalvindu:

osascript -l JavaScript iTuneScript.scpt

De -l JavaScript forteller osascript at skriptet bruker JXA.

JXA i Alfred

I nedlastings zip-filen finner du QuickEditJXA.alfredworkflow Alfred 3 arbeidsflyt.

Denne arbeidsflyten lar deg kopiere et utvalg i ett program, lime inn i et annet program du konfigurerer før hånden, og kopier deretter redigeringene tilbake til det opprinnelige programmet. 

Dette er veldig praktisk arbeidsflyt som sparer mye tid. Min foretrukne redaktør for å gjøre disse raske endringene er TextWell.

Alfred Workflow: Quick Edit i JXA

Det grønne settet med blokker kopierer den allerede valgte teksten og plasserer den i redigeringsprogrammet. I alfred, en handling kan splitte seg inn i et hvilket som helst antall andre handlekjeder. I denne splitter det to måter. 

Den øverste handlingslinjen utføres først, og den går tilbake til den andre handlingslinjen. Topplinjens første handling er a JXA manus:

funktionsdrift (argv) varquery = argv [0]; // // Få navnet på gjeldende program. // var system = Application ("System Events"); var proc = system.processes.whose (frontmost: '=': true) .navn (); return proc; 

Dette JXA Skriptet vil få det øverste programnavnet fra System Events sub-prosess. Linje 7 får et programobjekt på System Events. Linje 9 søker i rekke aktive prosesser med a .hvis (frontmost: '=': true) kommando som finner prosessen med forreste eiendom satt til ekte. Det returnerer deretter det prosessnavnet.

EN JXA skript i alfred må ha funksjonen kjøre () som aksepterer en rekke innganger. Uansett denne funksjonen returneres deretter videre til neste blokk i arbeidsflyten: en skrive til fil kommando. Dette lagrer nåværende programmets navn til filen for å komme tilbake til dette programmet etter redigering.

Den andre handlingslinjen kaller følgende JXA manus:

funktionsdrift (argv) var editorName = argv [0]; var ed = Søknad (editorName); ed.activate (); 

Navnet på redaktøren blir sendt til det fra det forrige Arg og Vars blokkere. Redigeringsprogrammet som er angitt av brukeren i miljøvariablene av Alfred arbeidsflyt. Linje 4 får applikasjonsobjektet for redaktøren, og Linje 5 aktiverer redigeringen.

På limehandlingen (de lilla blokkene) er det en JXA rutine:

ObjC.import ('stdlib') funktionsdrift (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 (håndtak); var dest = applikasjon (prog.trim ()); dest.activate (); komme tilbake "; 

Linje 1 inkluderer stdlib som er Objective C-biblioteket for standard systemtilgang. JXA lar deg bruke et hvilket som helst bibliotek som er på systemet for bruk i skriptene dine. Du kan bokstavelig talt skrive en full søknad på bare JXA!

Linjer 4-5 får det nåværende programobjektet og setter det opp for skripting. Linje 7 bruker stdlib for å få oppsettet for miljøvariabler av alfred: alfred_workflow_data. Denne miljøvariabelen gir banen til datakatalogen for den nåværende arbeidsflyten. 

Linje 9 åpner filen process.txt i arbeidsflytens datakatalog og linje 10 leser innholdet. Linjer 12-13 bringer søknaden til forsiden.

Når den opprinnelige applikasjonen er på forsiden, venter en forsinkelse for at operativsystemet skal hente seg, og deretter utløser arbeidsflyten a cmd-v å lime det inn i søknaden.

Den opprinnelige versjonen av denne arbeidsflyten benyttet seg av PHP og Applescript. Ved bruk av JXA, denne versjonen av arbeidsflyten går mye raskere og mer pålitelig. På samme måte kan du bruke JXA i andre programmer også. Tastatur Maestro, Hazel, og TextSoap, ved bruk av en Automator script, bare for å nevne noen.

Videre lesning

Du kan også finne mer informasjon om JXA fra disse nettstedene:

  • Apple Developer Notes om JavaScript for Automation
  • JXA Cookbook
  • Dan Thomas 'JXA Eksempler og nyttige rutiner
  • Tastatur Maestro Wiki på JXA

Konklusjon

I denne opplæringen har jeg vist deg hvordan du skal gjøre bruk av JXA i Script Editor, i kommandolinjen, og i en alfred arbeidsflyt. Nå som du vet hvordan du skal bruke JXA På din Mac kan du lage nyttige skript for å automatisere oppgaver. 

Gi meg beskjed, i kommentarene nedenfor, hva du lager.