Подписка на событие
Для выполнения своего кода нам необходимо подписаться на одно или несколько событий, для этого необходимо воспользоваться методом on
объекта events
:
spyBrowser.events.on(name, func)
В качестве первого аргумента передаётся имя события (в виде строки), вторым аргументом передаётся функция, которую необходимо выполнить. В нашем первом скрипте вторым аргументом мы передавали анонимную функцию:
spyBrowser.events.on("scriptLoadComplete", async function () { alert("Скрипт запущен"); }); spyBrowser.events.on("mainWindowLoadComplete", async function () { alert("Новая страница"); });
Данный код можно записать следующим образом:
// Объявляем функцию с именем func1 async function func1Async() { alert("Скрипт запущен"); } // Объявляем функцию с именем func2 async function func2Async() { alert("Новая страница"); } // Подписываемся на событие scriptLoadComplete, в качестве обработчика события - функция func1 spyBrowser.events.on("scriptLoadComplete", func1Async); // Подписываемся на событие mainWindowLoadComplete, в качестве обработчика события - функция func2 spyBrowser.events.on("mainWindowLoadComplete", func2Async);
И работать этот код будет аналогично первой записи, но делать этого не рекомендуется.
В текущей версии API доступны следующие события:
scriptLoadComplete
mainWindowLoadComplete
mainWindowLoadError
childWindowLoadComplete
childWindowLoadError
popupWindowLoadComplete
popupWindowLoadError
Событие scriptLoadComplete
Данное событие срабатывает один раз непосредственно после запуска скрипта пользователем. Во время перехода между страницами сайта или обновления/перезагрузки страницы событие не срабатывает.
Событие mainWindowLoadComplete
Событие срабатывает каждый раз после успешного завершения загрузки данных в главном фрейме страницы. Сюда относится как переход по другому адресу, так и перезагрузка/обновление текущего адреса.
Событие mainWindowLoadError
Событие срабатывает каждый раз после неудачного завершения загрузки данных в главном фрейме страницы. Событие mainWindowLoadComplete
в этом случае не срабатывает. Самая распространённая реакция на данное событие — попытка перезагрузить страницу вызовом метода reload
объекта location
:
spyBrowser.events.on("mainWindowLoadError", async function () { // Пауза 1 секунда await spyBrowser.script.sleepAsync(1000); // Инициируем перезагрузку текущей страницы window.location.reload(); });
Событие childWindowLoadComplete
Событие срабатывает каждый раз после успешного завершения загрузки данных в главном фрейме страниц дочерних вкладок. Сюда относится как переход по другому адресу, так и перезагрузка/обновление текущего адреса.
Событие childWindowLoadError
Событие срабатывает каждый раз после неудачного завершения загрузки данных в главном фрейме страниц дочерних вкладок. Событие childWindowLoadComplete
в этом случае не срабатывает.
Событие popupWindowLoadComplete
Событие срабатывает каждый раз после успешного завершения загрузки данных в главном фрейме страниц всплывающих окон. Сюда относится как переход по другому адресу, так и перезагрузка/обновление текущего адреса.
Событие popupWindowLoadError
Событие срабатывает каждый раз после неудачного завершения загрузки данных в главном фрейме страниц всплывающих окон. Событие popupWindowLoadComplete
в этом случае не срабатывает.
Программный вызов события
В некоторых редких случаях может потребоваться вызов того или иного события программно, для этого необходимо воспользоваться методом emit
объекта events
:
spyBrowser.events.emit(name)
В качестве первого аргумента передаётся имя события (в виде строки).
spyBrowser.events.on("scriptLoadComplete", async function () { // Программно вызываем событие mainWindowLoadComplete spyBrowser.events.emit("mainWindowLoadComplete"); }); spyBrowser.events.on("mainWindowLoadComplete", async function () { alert("Выполнение кода пользователя"); });
В приведённом примере во время запуска скрипта пользователем и навигации по страницам сайта выполняется один и тот же код.