2017-10-08 5 views
0

J'ai un script écrit en JavaScript qui doit exécuter un petit morceau d'AppleScript (pour réaliser certaines fonctionnalités que j'ai été incapable de mettre en œuvre en raison d'un certain nombre de facteurs natifs dans JS).Comment exécuter Applescript en ligne à partir d'un script JXA/JavaScript for Automation sur macOS?

Il devrait être en mesure de prendre un seul argument de chaîne, et est à peu près un tell-endtell one liner.

Est-il possible d'assembler ce nanoprogramme sous forme de chaîne en JavaScript, puis passer la chaîne à l'environnement AppleScript pour exécution, et comment cela serait-il fait?

Il existe de nombreuses explications en ligne sur la façon d'exécuter JavaScript à partir d'Applescript, mais pas autant dans l'autre sens.

Serait-ce - selon toute vraisemblance - impliquer une invocation shell de osascript -e pour atteindre, ou y at-il plus propre, plus de façons JXA-ey?

Répondre

0

Utilisez la commande run script des suppléments standard.

(BTW, ma recommandation standard est de s'en tenir à l'utilisation d'AppleScript pour l'automatisation des applications, car c'est la seule option [supportée] qui fonctionne correctement Les divers bugs, défauts et omissions de JXA étaient connus avant même d'être expédiés. Il ne sera pas dérangé de les réparer à l'époque, donc ils ne seront certainement pas corrigés maintenant l'équipe Automation a été éliminée.Toute la plate-forme Mac Automation meurt, mais au moins AppleScript devrait bitrot plus lent que JXA, qui n'a jamais été bon pour commencer avec.)

0

Voici une fonction evalAS pour macOS ES6 (Sierra à partir de). L'avantage de l'approche shell est simplement que les ajouts de scripts sont automatiquement disponibles dans l'environnement d'évaluation.

Si nous utilisons la définition suivante alternative evalSA, nous devons préfixer explicitement notre chaîne d'expression avec « l'utilisation de scripts additions \ n »

(() => { 
    'use strict'; 

    // evalAS2 :: String -> IO a 
    const evalAS2 = s => { 
     const a = Application.currentApplication(); 
     return (a.includeStandardAdditions = true, a) 
      .runScript(s); 
    }; 

    return evalAS2(
     'use scripting additions\n\ 
     tell Application "Finder" to the clipboard' 
    ); 
})();