Guide pour débutants de JXA, Script d'application JavaScript

Si vous avez déjà écrit des scripts sur Mac, vous avez probablement déjà vu AppleScript. AppleScript a été la norme de facto pour le maillage des applications et pour les scripts d'interface utilisateur. 

Puisque OS X 10.10 Yosemite, il existe un deuxième langage de script pour les scripts d'interface utilisateur: JavaScript pour l'automatisation (JXA)

Dans ce tutoriel, je vais vous aider à apprendre cette alternative à AppleScript avec quelques exemples du monde réel.

Lancer JXA

Il y a plusieurs façons de gérer un JXA scénario. La manière standard d’exécuter un script JXA est la suivante: Éditeur de script cela fait partie du système d'exploitation.

Éditeur de script défini pour JavaScript (JXA)

Avec la liste déroulante dans le coin supérieur gauche, sous le bouton d’arrêt, définissez-la sur JavaScript au lieu de AppleScript, tu as un complet JavaScript interprète. Pour accéder à l'application en cours pour le script, ajoutez ces lignes:

// // Récupère l'application actuelle et la configure // pour la création de scripts. // var app = Application.currentApplication (); app.includeStandardAdditions = true;

La première ligne obtiendra l'objet JXA pour l'application qui exécute le code. La deuxième ligne vous permet d’ajouter des boîtes de dialogue et d’autres goodies à cet objet d’application.. 

Ajoutez maintenant ceci au script:

// // Envoyer un message à l'utilisateur. // app.displayAlert ("Ceci est un message");
Exemple de message

Lorsque vous exécutez ceci, il affichera une boîte de dialogue avec le texte "Ceci est un message".

Si vous voulez choisir parmi une liste d'éléments, ajoutez ce qui suit:

// // Laisse l'utilisateur choisir dans une liste. // var lang = app.chooseFromList (['JavaScript', 'AppleScript', 'JXA'], withPrompt: 'Quelle est votre langue préférée?'); app.displayNotification (lang, withTitle: 'Choix de la langue', sous-titre: 'Votre choix est…');

le ChooseFromList () function prend un tableau de chaînes et un objet optionnel avec des options de configuration. le avecPrompt L’option de configuration vous permet de définir le texte affiché au-dessus de la liste des chaînes. La chaîne sélectionnée sera de retour.

le displayNotification () Cette fonction est ensuite utilisée pour afficher une notification avec les informations fournies à l'utilisateur. Vous pouvez définir le titre et le sous-titre de la notification avec l'objet de configuration..

Exemple de sélecteur de liste

Lorsque vous appuyez sur le bouton Exécuter (le triangle pointé à droite dans la barre d’outils), vous choisissez votre langage de programmation préféré dans la boîte de dialogue..

Notification affichée

Lorsque vous en sélectionnez un, comme JXA, votre sélection s’affiche dans une fenêtre de notification. Si l'utilisateur sélectionne Cancel dans la boîte de dialogue, le résultat renvoyé sera le booléen False..

Si vous avez besoin d’obtenir des informations de la part de l’utilisateur, utilisez la commande displayDialog () une fonction. Avec cette fonction, vous devez l’appeler dans un délai de essayer… attraper structure parce que si l'utilisateur appuie sur le bouton d'annulation, une erreur sera générée. Tapez le code suivant:

// // Récupère les informations saisies par l'utilisateur. // try var age = app.displayDialog ('Quel âge avez-vous?', defaultAnswer: ""); app.displayNotification (age.textReturned + 'years old!', withTitle: 'Vous avez quel âge?');  catch (e) app.displayNotification ('Utilisateur annulé', avec Titre: 'Erreur'); 
Obtenir les commentaires de l'utilisateur

En exécutant ce code, il vous sera demandé votre âge dans une invite. Lorsque vous tapez un âge et cliquez sur OK, une notification vous demandant votre nom s’affiche. Si vous appuyez sur Annuler, une notification avec le texte Erreur Utilisateur annulé affichée.

Un exemple classique

L’exemple classique de l’automatisation de programme est d’ouvrir iTunes, et jouer une chanson. Dans un nouveau fichier appelé iTunesScript.scpt, ajoutez le code suivant:

// // Obtient un objet d'application pour iTunes. // var itune = Application ('iTunes'); itune.activate (); // // Jouer une chanson. // itune.play (); // // Pour faire une pause: // itune.pause () // // Pour arrêter: // itune.stop () // // // Obtenir les informations de la piste en cours. // var track = itune.currentTrack () var info = track.name () + "-" + track.artist () + "-" + track.album () + "-" + track.duration (); // // Affiche les informations à l'utilisateur. // var app = Application.currentApplication (); app.includeStandardAdditions = true; app.displayNotification (info, withTitle: 'iTunes Song'); 

Ce script jouera la chanson en cours dans iTunes et affichez le nom, l'artiste, l'album et la durée des chansons dans une notification.

Script iTunes

Le contrôle de base d’une application consiste à obtenir un objet d’application, à exécuter des méthodes de cet objet pour obtenir les informations nécessaires ou l’effet souhaité. Vous pouvez obtenir des informations sur les méthodes valides de chaque objet de l'application à partir du Fichier> Ouvrir le dictionnaire menu dans le Éditeur de script.

Si vous souhaitez exécuter le script sur une ligne de commande, vous devez saisir cette commande dans une fenêtre de terminal:

osascript -l JavaScript iTuneScript.scpt

le -l JavaScript indique à osascript que le script utilise JXA.

JXA à Alfred

Dans le fichier zip de téléchargement, vous trouverez le QuickEditJXA.alfredworkflow Alfred 3 flux de travail.

Ce flux de travail vous permet de copier une sélection dans un programme, de le coller dans un autre programme que vous avez configuré au préalable, puis de copier les modifications dans le programme d'origine.. 

C'est un flux de travail très pratique qui permet de gagner beaucoup de temps. Mon éditeur préféré pour effectuer ces modifications rapides est TextWell.

Alfred Workflow: édition rapide dans JXA

L'ensemble de blocs vert copie le texte déjà sélectionné et le place dans l'éditeur. Dans Alfred, une action peut être divisée en un nombre quelconque d'autres chaînes d'action. Dans celui-ci, il se divise en deux. 

La ligne d'action la plus haute est exécutée en premier, puis elle sauvegarde la deuxième ligne d'action. La première action de la première ligne est un JXA scénario:

fonction run (argv) var requête = argv [0]; // // Récupère le nom de l'application en cours. // var system = Application ("Evénements système"); var proc = system.processes.whose (frontmost: '=': true). name (); retour proc; 

Ce JXA Le script obtiendra le nom d'application le plus élevé du sous-processus System Events. La ligne 7 obtient un objet d’application sur les événements système. La ligne 9 recherche l’ensemble des processus actifs avec .dont (frontmost: '=': true) commande qui trouve le processus avec le au premier plan propriété définie sur true. Il retourne ensuite le nom de ce processus.

UNE JXA script dans Alfred doit avoir la fonction run () qui accepte un tableau d’entrées. Tout ce que cette fonction renvoie est ensuite transmis au bloc suivant du flux de travail: une commande write to file. Ceci enregistre le nom de l’application actuelle dans le fichier pour pouvoir y revenir après l’édition..

La deuxième ligne d’action appelle le suivant JXA scénario:

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

Le nom de l'éditeur est passé du précédent Arg et Vars bloc. L’application d’édition définie par l’utilisateur dans la section des variables d’environnement du Alfred flux de travail. La ligne 4 récupère l'objet application de l'éditeur et la ligne 5 active l'éditeur.

Sur l'action coller (les blocs violets), il y en a un JXA routine:

ObjC.import ('stdlib') fonction 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 (); revenir "; 

La ligne 1 comprend le stdlib qui est la bibliothèque Objective C pour un accès système standard. JXA vous permet d'utiliser n'importe quelle bibliothèque du système à utiliser dans vos scripts. Vous pouvez littéralement écrire une application complète en seulement JXA!

Les lignes 4 à 5 récupèrent l’objet d’applications actuel et le configurent pour la création de scripts. La ligne 7 utilise le stdlib pour obtenir la configuration de la variable d'environnement par Alfred: alfred_workflow_data. Cette variable d’environnement donne le chemin du répertoire de données pour le workflow en cours.. 

La ligne 9 ouvre le fichier process.txt dans le répertoire de données du flux de travail et Line 10 en lit le contenu. Lignes 12-13 apporte l'application à l'avant.

Une fois l’application initiale à l’avant, un délai s’attend pour que le système d’exploitation rattrape son retard, puis le flux de travail génère une erreur. cmd-v coller dans l'application.

La version originale de ce flux de travail utilisait PHP et Applescript. En utilisant JXA, cette version du workflow s'exécute beaucoup plus rapidement et de manière plus fiable. De la même manière, vous pouvez utiliser JXA dans d'autres programmes aussi. Clavier Maestro, Noisette, et TextSoap, en utilisant un Automator script, pour n'en nommer que quelques-uns.

Lectures complémentaires

Vous pouvez également trouver plus d'informations sur JXA à partir de ces sites:

  • Notes pour les développeurs Apple sur JavaScript pour l'automatisation
  • Livre de recettes JXA
  • Exemples JXA de Dan Thomas et routines utiles
  • Clavier Maestro Wiki sur JXA

Conclusion

Dans ce tutoriel, je vous ai montré comment utiliser JXA dans le Éditeur de script, dans la ligne de commande et dans un Alfred flux de travail. Maintenant que vous savez utiliser JXA sur votre Mac, vous pouvez créer des scripts utiles pour automatiser des tâches. 

Faites-moi savoir, dans les commentaires ci-dessous, ce que vous créez.