Пользовательское поведение
Функция, позволяющая создавать собственные команды и автоматизации с помощью языка 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 общий для всех скриптов. Попытка изменения какого-либо свойства внутри объекта приведет к его изменению во всех последующих скриптах.
Скрипты выполняются в той последовательности, в которой они отображаются на странице настроек. Также выполнение ограничено во времени и памяти.
Отладка
Подробности об ошибках отображаются в логах или в ответе на взаимодействие (если применимо).