Пользовательское поведение
Функция, позволяющая создавать собственные команды и автоматизации с помощью языка JavaScript
Если вы уже работали с каким-нибудь языком программирования или напрямую сталкивались с JS, то вам будет легче понять работу данной функции. Если же нет, то перед началом советуем ознакомиться с разделом Введение в JavaScript, так как знание основ этого языка необходимо для понимания более сложных разделов. Использовать эти функции без знания языка будет очень трудно.
О чем стоит знать
Данная функция предназначена для расширения базового функционала Lacuna. В пользовательских командах и автоматизациях вам предоставляется возможность самостоятельно написать скрипты, которые будут выполняться при вызове команды или при срабатывании триггера автоматизации.
В скриптах используется изолированное окружение движка JavaScript V8. В нём отсутствуют специфические объекты и функции, ко торые не являются частью стандарта ECMAScript или спецификации JavaScript.
Чего нет в V8?
Объекты браузера
window
,document
,navigator
,localStorage
, и другие объекты DOM и Web API.- Объекты, связанные с графикой и мультимедиа, такие как
CanvasRenderingContext2D
,WebGL
,AudioContext
. - API для работы с сетью, такие как
fetch
,XMLHttpRequest
. - API для работы с событиями:
addEventListener
,dispatchEvent
.
Объекты Node.js
require
,module
,exports
.- Глобальные объекты, такие как
process
,Buffer
,__dirname
,__filename
. - Модули из стандартной библиотеки Node.js, например:
fs
,path
,http
,events
,os
.
V8 поддерживает
- Все стандартные объекты ECMAScript, такие как
Object
,Array
,Date
,Map
,Set
,Math
. - Глобальные функции, такие как
encodeURI
,isNaN
,parseInt
. - Асинхронные конструкции, такие как
async/await
,Promise
,Generator
.
Выполнение кода
Каждый скрипт выполняется в одном контексте и имеет свою область видимости, в которой определяются переменные, функции, классы и т.д. Это означает, что объявленная переменная a
в одном скрипте не будет видна в другом. Чтобы передавать данные между скриптами вам необходимо объявить их в глобальном объекте global
:
- Script 001
- Script 002
const foo = 'foo'
global.foo = foo
foo // undefined
global.foo // string
Объект global
общий для всех скриптов. Попытка изменения какого-либо свойства внутри объект а приведет к его изменению во всех последующих скриптах.
Скрипты выполняются в той последовательности, в которой они отображаются на странице настроек. Также выполнение ограничено во времени и памяти.
Отладка
Подробности об ошибках отображаются в логах или в ответе на взаимодействие (если применимо).