Een beginnershandleiding voor JXA, JavaScript Application Scripting

Als je ooit een script hebt gedaan op de Mac, dan heb je het waarschijnlijk gezien AppleScript. AppleScript is de de facto standaard voor samengevoegde applicaties en voor scripting met gebruikersinterfaces. 

Sinds OS X 10.10 Yosemite, er is een tweede scriptingtaal voor scripting van de gebruikersinterface: JavaScript voor automatisering (JXA)

In deze tutorial help ik je dit alternatief te leren AppleScript met voorbeelden uit de echte wereld.

JXA uitvoeren

Er zijn veel manieren om een ​​a uit te voeren JXA script. De standaardmanier om JXA-script uit te voeren is met de Scripteditor dat is een onderdeel van het besturingssysteem.

Scripteditor ingesteld voor JavaScript (JXA)

Plaats de lijst in de linkerbovenhoek, onder de stopknop, op JavaScript in plaats van AppleScript, je hebt een vol JavaScript tolk. Voer de volgende regels in om toegang te krijgen tot de huidige toepassing voor scripting:

// // Download de huidige applicatie en stel // in voor scripting. // var app = Application.currentApplication (); app.includeStandardAdditions = true;

De eerste regel krijgt het JXA-object voor de toepassing die de code uitvoert. Met de tweede regel kunt u dialoogvensters en andere goodies aan dat toepassingsobject toevoegen. 

Voeg dit nu toe aan het script:

// // Stuur een bericht naar de gebruiker. // app.displayAlert ("Dit is een bericht");
Bericht Voorbeeld

Wanneer u dit uitvoert, wordt een berichtvenster weergegeven met de tekst "Dit is een bericht".

Als je uit een lijst met items wilt kiezen, voeg je het volgende toe:

// // Laat de gebruiker kiezen uit een lijst. // var lang = app.chooseFromList (['JavaScript', 'AppleScript', 'JXA'], withPrompt: 'Wat is uw favoriete taal?'); app.displayNotification (lang, withTitle: 'Language Chooser', ondertitel: 'Your Choice is ...');

De chooseFromList () functie neemt een reeks van reeksen en een optioneel object met configuratie-opties. De withPrompt Met de configuratieoptie kunt u de tekst instellen die boven de lijst met strings wordt weergegeven. De geselecteerde reeks zal terugkeren.

De displayNotification () De functie wordt vervolgens gebruikt om een ​​melding weer te geven met de informatie die aan de gebruiker wordt verstrekt. U kunt de titel en ondertitel van de melding instellen met het configuratieobject.

Voorbeeld lijstkiezer

Als u op de knop Uitvoeren drukt (de driehoek met de pijl naar rechts op de werkbalk), kiest u uw favoriete programmeertaal in het dialoogvenster.

Melding weergegeven

Wanneer u er een selecteert, zoals JXA, wordt uw selectie vervolgens weergegeven in een pop-upmelding. Als de gebruiker annuleert in het dialoogvenster, is het resultaat Boolean False.

Als u informatie van de gebruiker nodig hebt, gebruikt u de displayDialog () functie. Met deze functie moet je het binnen een a noemen proberen te vangen structuur, want als de gebruiker op de knop Annuleren drukt, wordt er een fout gegenereerd. Typ de volgende code in:

// // Krijg getypte gebruikersinformatie. // try var age = app.displayDialog ('Hoe oud ben je?', defaultAnswer: ""); app.displayNotification (age.textReturned + 'years old!', withTitle: 'You are How old?');  catch (e) app.displayNotification ('User Cancelled', withTitle: 'Error'); 
Input krijgen van de gebruiker

Door die code uit te voeren, wordt u om uw leeftijd gevraagd in een prompt. Wanneer u een leeftijd invoert en op OK klikt, wordt er een melding weergegeven met uw naam. Als u op Annuleren drukt, wordt een melding weergegeven met de tekst Fout gebruiker geannuleerd weergegeven.

Een klassiek voorbeeld

Het klassieke voorbeeld van programma-automatisering is openen iTunes, en speel een liedje. In een nieuw bestand genaamd iTunesScript.scpt, voeg de volgende code toe:

// // Download een toepassingsobject voor iTunes. // var itune = Toepassing ('iTunes'); itune.activate (); // // Speel een liedje. // itune.play (); // // Onderbreken: // itune.pause () // // Stoppen: // itune.stop () // // // De huidige trackinformatie ophalen. // var track = itune.currentTrack () var info = track.name () + "-" + track.artist () + "-" + track.album () + "-" + track.duration (); // // Geef de informatie weer aan de gebruiker. // var app = Application.currentApplication (); app.includeStandardAdditions = true; app.displayNotification (info, withTitle: 'iTunes Song'); 

In dit script wordt het huidige nummer afgespeeld iTunes en toon de naam, artiest, album en duur van de nummers in een melding.

iTunes Script

De basis voor het besturen van een toepassing is om een ​​toepassingsobject te verkrijgen, methoden van het object uit te voeren om de benodigde informatie of het gewenste effect te krijgen. U kunt informatie over elke geldige methode voor toepassingsobjecten verkrijgen via de Bestand> Woordenboek openen menu in de Scripteditor.

Als u het script op een opdrachtregel wilt uitvoeren, typt u deze opdracht in een terminalvenster:

os JavaScript -l JavaScript iTuneScript.scpt

De -l JavaScript vertelt osascript dat het script gebruikt JXA.

JXA in Alfred

In het download-zipbestand vindt u de QuickEditJXA.alfredworkflow Alfred 3 workflow.

Met deze workflow kunt u een selectie in één programma kopiëren, in een ander programma plakken dat u eerder hebt ingesteld en vervolgens de bewerkingen terug naar het oorspronkelijke programma kopiëren. 

Dit is een erg handige workflow die veel tijd bespaart. Mijn favoriete editor voor het maken van deze snelle wijzigingen is TextWell.

Alfred Workflow: snel bewerken in JXA

De groene set blokken kopieert de reeds geselecteerde tekst en plaatst deze in de editor. In Alfred, een actie kan opgesplitst worden in een aantal andere actieketens. In deze splitst het op twee manieren. 

De bovenste actielijn wordt eerst uitgevoerd en vervolgens wordt een back-up gemaakt naar de tweede actielijn. De eerste actie van de bovenste regel is a JXA script:

function run (argv) var query = argv [0]; // // Verkrijg de naam van de huidige toepassing. // var system = Applicatie ("Systeemgebeurtenissen"); var proc = system.processes.whose (frontmost: '=': true). name (); terugkeer proc; 

Deze JXA script krijgt de bovenste applicatienaam van het subproces Systeemgebeurtenissen. Regel 7 krijgt een toepassingsobject op systeemgebeurtenissen. Regel 9 doorzoekt de reeks actieve processen met een .wiens (frontmost: '=': true) commando dat het proces vindt met de voorste eigenschap ingesteld op true. Vervolgens wordt de naam van dat proces geretourneerd.

EEN JXA script in Alfred moet de functie run () hebben die een reeks ingangen accepteert. Wat deze functie ook retourneert, wordt vervolgens doorgegeven aan het volgende blok in de werkstroom: een opdracht schrijven naar bestand. Hiermee slaat u de naam van de huidige toepassing op in het bestand om na bewerking terug te gaan naar deze toepassing.

De tweede actielijn roept het volgende op JXA script:

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

De naam van de editor wordt er vanaf de vorige pagina doorgegeven Arg en Vars blok. De editor-applicatie die door de gebruiker is ingesteld in het gedeelte omgevingsvariabelen van de Alfred-workflow. Regel 4 krijgt het toepassingsobject voor de editor en regel 5 activeert de editor.

Over de paste actie (de paarse blokken), er is er een 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 (); terug ";

Lijn 1 bevat de stdlib wat de Objective C-bibliotheek is voor standaard systeemtoegang. JXA staat u toe om elke bibliotheek op het systeem te gebruiken voor gebruik in uw scripts. Je kunt letterlijk een volledige applicatie in gewoon schrijven JXA!

Regel 4-5 krijgt het huidige toepassingsobject en stelt het in voor scripting. Regel 7 gebruikt de stdlib om de omgevingsvariabele setup by te krijgen Alfred: alfred_workflow_data. Deze omgevingsvariabele geeft het pad naar de gegevensdirectory voor de huidige werkstroom. 

Regel 9 opent het bestand process.txt in de gegevensdirectory van de werkstroom en leest lijn 10 de inhoud ervan. Regel 12-13 brengt de applicatie naar voren.

Zodra de originele toepassing vooraan staat, wacht een vertraging op het inlopen van het besturingssysteem en vervolgens geeft de werkstroom een cmd-v om het in de applicatie te plakken.

De originele versie van deze workflow is gebruikt PHP en Applescript. Door het gebruiken van JXA, deze versie van de workflow werkt veel sneller en betrouwbaarder. Op dezelfde manier kunt u gebruiken JXA in andere programma's ook. Keyboard Maestro, hazelnoot, en TextSoap, door gebruik van een Automator script, om maar een paar te noemen.

Verder lezen

U kunt ook meer informatie vinden over JXA van deze websites:

  • Apple Developer Notes over JavaScript voor automatisering
  • JXA Kookboek
  • Dan Thomas 'JXA voorbeelden en nuttige routines
  • Keyboard Maestro Wiki op JXA

Conclusie

In deze zelfstudie heb ik je laten zien hoe je gebruik kunt maken van JXA in de Scripteditor, in de opdrachtregel en in een Alfred workflow. Nu dat je weet hoe te gebruiken JXA op uw Mac kunt u enkele nuttige scripts maken voor het automatiseren van taken. 

Laat me in de onderstaande opmerkingen weten wat je maakt.