User Tools

Site Tools


action:Execute_a_JavaScript_For_Automation

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
action:Execute_a_JavaScript_For_Automation [2017/11/16 20:13]
JMichaelTX [Get/Set Local & Instance Variables]
action:Execute_a_JavaScript_For_Automation [2023/09/12 22:56] (current)
peternlewis
Line 16: Line 16:
   *Asynchronously ignored — the action runs while the macro continues on.   *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 ​=====+===== Modern Syntax ​=====
  
-==== Global Variables ====+In version 11.0, scripts default to Modern Syntax, which essentially wraps the script in:
  
-  +```javascript 
-** Example JXA Script shows how to Get/Set Keyboard Maestro //Global// Variables, and Get/​Set ​the System Clipboard.**+(function () { 
 +… 
 +})() 
 +``` 
 + 
 +This helps keep your script from interacting with the web page in unexpected ways. A result of this is that you need to return values to the action using the `return` syntaxSo a trivial action would be:
  
 ```javascript ```javascript
-'use strict'​+return "​Hello"​
-(function run() {      // this will auto-run when script is executed+```
  
-  // --- SET CURRENT APP VARIABLE NEEDED FOR DIALOGS & StandardAdditions.osax --- +You can turn Modern Syntax on or off in the popup menu next to the script.
-  var app = Application.currentApplication() +
-  app.includeStandardAdditions = true+
  
-  // --- SET KME APP VARIABLE NEEDED TO GET/SET KM VARIABLES --- +===== Using Keyboard Maestro Variables ===== 
-  var kme Application("​Keyboard Maestro Engine");+ 
 +In Modern Syntax (v11.0+), reference the variable like this: 
 + 
 +```javascript 
 +var kmvar.My_KM_Data 
 +``` 
 + 
 +Alternatively,​ the variables are stored in the environment variables with a prefix of `KMVAR_`. 
 + 
 +When accessing a variable, if its name has a space in it, replace it with an underscore. 
 + 
 +Local and Instance variables are available, but Password variables are not. 
 + 
 +By default, all variables are included, but you can select No Variables, or specific variables as desired using the popup menu next to the script. 
 + 
 +==== Using JXA to Access Variables ==== 
 + 
 +You can use JXA’s ability to communicate with the Keyboard Maestro Engine ​to read and write variables. 
 + 
 +```javascript 
 +// Assumes Modern Syntax
   ​   ​
 +// --- SET CURRENT APP VARIABLE NEEDED FOR DIALOGS & StandardAdditions.osax ---
 +var app = Application.currentApplication()
 +app.includeStandardAdditions = true
  
-  ​//--- GET KM VARIABLE ​---  +// --- SET KME APP VARIABLE NEEDED TO GET/SET KM VARIABLES ​--- 
-  // ​   Returns empty string if it doesn'​t exist +var kme Application("Keyboard Maestro Engine");
-  ​var someVarNameStr ​kme.getvariable("KMVarNameToGet"​) ​|| '​Default Value if NOT Found'; +
-  console.log("​someVarNameStr:​ " + someVarNameStr)+
   ​   ​
-  ​var someNewDataStr ​= "Text to be set to a KM var";+ 
 +//--- 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)
   ​   ​
-  ​//--- SET A KM VARIABLE --- +var someNewDataStr = "Text to be set to a KM var";​ 
-  //      Creates the Variable if it doesn'​t exist +   
-  //      Verify Variable in the KM App Preferences +//--- SET A KM VARIABLE --- 
-  kme.setvariable("​KMVarNameToSet",​ { to: someNewDataStr });+//      Creates the Variable if it doesn'​t exist 
 +//      Verify Variable in the KM App Preferences 
 +kme.setvariable("​KMVarNameToSet",​ { to: someNewDataStr });
  
   ​   ​
-  ​//--- GET TEXT ON CLIPBOARD --- +//--- GET TEXT ON CLIPBOARD --- 
-  var clipboardStr = app.theClipboard() +var clipboardStr = app.theClipboard() 
-  console.log("​clipboardStr:​ " + clipboardStr) +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() +var someDataStr = "​Example text to put on clipboard"​
-)();+
  
 +//--- COPY TO CLIPBOARD ---
 +//      Verify using KM Clipboard History Viewer
 +app.setTheClipboardTo(someDataStr)
 ``` ```
---- 
  
 ==== Local & Instance Variables ==== ==== Local & Instance Variables ====
-**How To Get/Set Keyboard Maestro Local & Instance Variables** 
  
-Keyboard Maestro ​Ver 8 introduced ​[[manual:​Variables#​Instance_Variables_v8|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.+Keyboard Maestro ​has [[manual:​Variables#​Instance_Variables_v8|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.
  
 ```javascript ```javascript
Line 81: Line 105:
 kmeApp.setvariable("​Local__FromJXA",​ {instance: kmInst, to: "Set in JXA Script"​}) kmeApp.setvariable("​Local__FromJXA",​ {instance: kmInst, to: "Set in JXA Script"​})
 ``` ```
- 
---- 
  
 ===== Displaying User Dialogs ===== ===== Displaying User Dialogs =====
Line 89: Line 111:
  
 ```javascript ```javascript
-'use strict';​ 
-(function run() {      // this will auto-run when script is executed 
- 
 // --- SET CURRENT APP VARIABLE NEEDED FOR DIALOGS & StandardAdditions.osax --- // --- SET CURRENT APP VARIABLE NEEDED FOR DIALOGS & StandardAdditions.osax ---
 var app = Application.currentApplication() var app = Application.currentApplication()
Line 115: Line 134:
  
 return ("Btn: " + BtnStr) return ("Btn: " + BtnStr)
- 
-}  // END of function run() 
-)(); 
 ``` ```
  
 +===== See Also =====
  
-**For more information,​ see:** 
   * [[::​JavaScript for Automation]] Wiki Discussion   * [[::​JavaScript for Automation]] Wiki Discussion
   * [Forum Topics tagged with "​JXA"​](https://​forum.keyboardmaestro.com/​tags/​jxa)   * [Forum Topics tagged with "​JXA"​](https://​forum.keyboardmaestro.com/​tags/​jxa)
   * [Learning & Using AppleScript & JavaScript for Automation (JXA)](http://​forum.keyboardmaestro.com/​t/​learning-using-applescript-javascript-for-automation-jxa/​1545)   * [Learning & Using AppleScript & JavaScript for Automation (JXA)](http://​forum.keyboardmaestro.com/​t/​learning-using-applescript-javascript-for-automation-jxa/​1545)
action/Execute_a_JavaScript_For_Automation.1510881202.txt.gz · Last modified: 2017/11/16 20:13 by JMichaelTX