Перейти к основному содержимому

Пользовательское поведение

Функция, позволяющая создавать собственные команды и автоматизации с помощью языка 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:

const foo = 'foo'
global.foo = foo
Обратите внимание

Объект global общий для всех скриптов. Попытка изменения какого-либо свойства внутри объекта приведет к его изменению во всех последующих скриптах.

Скрипты выполняются в той последовательности, в которой они отображаются на странице настроек. Также выполнение ограничено во времени и памяти.

Отладка

Подробности об ошибках отображаются в логах или в ответе на взаимодействие (если применимо).