E-MAIL: vldkasat@mail.ru

SKYPE: samara-weblab.ru

TELEGRAM: @samara_weblab

Техническая поддержка осуществляется по будням с 09:00 до 19:00 по МСК. В выходные и праздничные дни - график свободный.

spyBrowser.events — отслеживание событий

Подписка на событие

Для выполнения своего кода нам необходимо подписаться на одно или несколько событий, для этого необходимо воспользоваться методом on объекта events:

  • spyBrowser.events.on(name, func)

В качестве первого аргумента передаётся имя события (в виде строки), вторым аргументом передаётся функция, которую необходимо выполнить. В нашем первом скрипте вторым аргументом мы передавали анонимную функцию:

spyBrowser.events.on("scriptLoadComplete", async function () {

    alert("Скрипт запущен");

});

spyBrowser.events.on("mainWindowLoadComplete", async function () {

    alert("Новая страница");

});
Для получения информации по анонимным функциям обратитесь к документации/спецификации по JavaScript.

Данный код можно записать следующим образом:

// Объявляем функцию с именем func1
async function func1Async() {

    alert("Скрипт запущен");

}

// Объявляем функцию с именем func2
async function func2Async() {

    alert("Новая страница");

}

// Подписываемся на событие scriptLoadComplete, в качестве обработчика события - функция func1
spyBrowser.events.on("scriptLoadComplete", func1Async);

// Подписываемся на событие mainWindowLoadComplete, в качестве обработчика события - функция func2
spyBrowser.events.on("mainWindowLoadComplete", func2Async);

И работать этот код будет аналогично первой записи, но делать этого не рекомендуется.

Рекомендуется использовать именно анонимные функции, в противном случае объявленные функции становятся свойствами глобального объекта window, что влечёт за собой:
  • конфликты со скриптами самого сайта (т.к. имя функции может совпасть с именем переменной/функции/объекта, которое используют скрипты на сайте)
  • снижение анонимности (т.к. сайт со своей стороны «видит» объявленные функции)

В текущей версии 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();

});
Для получения информации по методу window.location.reload обратитесь к документации/спецификации по JavaScript.
Функция setTimeout — это встроенная функция JavaScript, она описана в документации/спецификации по JavaScript.

Событие 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("Выполнение кода пользователя");

});

В приведённом примере во время запуска скрипта пользователем и навигации по страницам сайта выполняется один и тот же код.