User Tools

Site Tools


action:Execute_a_JavaScript_For_Automation

**This is an old revision of the document!**

Execute JavaScript for Automation Action

The Execute a JavaScript For Automation action executes the specified script, either from a file or text.

Script Results

The results of the script can be:

  • Ignored.
  • Displayed in a floating window.
  • Displayed briefly in a Notification.
  • Typed in to the current selection.
  • Pasted in to the current selection.
  • Saved to a variable.
  • Saved to the system or a Named Clipboard.
  • Asynchronously ignored — the action runs while the macro continues on.

By default, errors are not included in the output, and the output is trimmed of white space. These can be adjusted in the action (gear) ⚙ menu.

Get/Set Keyboard Maestro Variables

Global Variables

Example JXA Script shows how to Get/Set Keyboard Maestro Global Variables, and Get/Set the System Clipboard.

snippet.javascript
'use strict';
(function run() {      // this will auto-run when script is executed
 
  // --- SET CURRENT APP VARIABLE NEEDED FOR DIALOGS & StandardAdditions.osax ---
  var app = Application.currentApplication()
  app.includeStandardAdditions = true
 
  // --- SET KME APP VARIABLE NEEDED TO GET/SET KM VARIABLES ---
  var kme = Application("Keyboard Maestro Engine");
 
 
  //--- GET A KM VARIABLE --- 
  //    Returns empty string if it doesn't exist
  var someVarNameStr = kme.getvariable("KMVarNameToGet") || 'Default Value if NOT Found';
  console.log("someVarNameStr: " + someVarNameStr)
 
  var someNewDataStr = "Text to be set to a KM var";
 
  //--- SET A KM VARIABLE ---
  //      Creates the Variable if it doesn't exist
  //      Verify Variable in the KM App Preferences
  kme.setvariable("KMVarNameToSet", { to: someNewDataStr });
 
 
  //--- GET TEXT ON CLIPBOARD ---
  var clipboardStr = app.theClipboard()
  console.log("clipboardStr: " + clipboardStr)
 
  var someDataStr = "Example text to put on clipboard"
 
  //--- COPY TO CLIPBOARD ---
  //      Verify using KM Clipboard History Viewer
  app.setTheClipboardTo(someDataStr)
 
 
}  // END of function run()
)();

Local and Instance variables are available (as described below), but Password variables are not.

Local & Instance Variables

How To Get/Set Keyboard Maestro Local & Instance Variables

Keyboard Maestro Ver 8 introduced Local and Instance Variables. In order to get or set these, you need to use different parameters in the JXA get/set methods. Here is an example.

snippet.javascript
var app = Application.currentApplication()
app.includeStandardAdditions = true
 
var kmInst = app.systemAttribute("KMINSTANCE");
var kmeApp = Application("Keyboard Maestro Engine")
 
var myLocalVar = kmeApp.getvariable("Local__MyVar",  {instance: kmInst});
kmeApp.setvariable("Local__FromJXA", {instance: kmInst, to: "Set in JXA Script"})

Displaying User Dialogs

JavaScript For Automation scripts are executed in the background via osascript. In order to have user interaction in the script, you will need to use a reference to the “current application”. For example:

snippet.javascript
'use strict';
(function run() {      // this will auto-run when script is executed
 
// --- SET CURRENT APP VARIABLE NEEDED FOR DIALOGS & StandardAdditions.osax ---
var app = Application.currentApplication()
app.includeStandardAdditions = true
 
var MsgStr  = "This is an example of JXA Display Dialog"
var TitleStr  = "Dialog Title"
var AnswerStr = "NONE"
 
app.beep()
var oAns = app.displayDialog(MsgStr,
            {
              withTitle:      TitleStr
              ,withIcon:      "caution"
              ,buttons:       ["Cancel","OK"]
              ,defaultButton: "OK"
              ,cancelButton:  "Cancel"
            })
 
//--- Script is stopped here if user chooses "Cancel" ---
 
var BtnStr = oAns.buttonReturned
 
return ("Btn: " + BtnStr)
 
}  // END of function run()
)();

For more information, see:

action/Execute_a_JavaScript_For_Automation.1680494467.txt.gz · Last modified: 2023/04/03 00:01 by peternlewis