# JavaScript API
ВНИМАНИЕ!
Этот документ предназначен для программиста JavaScript.
Объект Web-страница отображается при помощи браузера (chrome), встроенного в приложение KeenVision Player.
Для объекта Web-страница можно задать код на языке JavaScript, который будет добавлен к коду веб-страницы и запустится сразу после ее загрузки.
# Варианты запуска JavaScript
Есть два варианта запуска JavaScript, указанного в объекте веб-страница:
когда страница загружена;
при начале загрузки страницы, для этого первая строка скрипта должна быть такой:
//onPageStartedLoading
Пример скрипта, который запускается при начале загрузки страницы:
//onPageStartedLoading
function runOnDocumentReadyStateIsComplete() {
if (document.readyState !== 'complete') return;
/* код который исполняется когда документ готов */
};
function kvm() {
/* код который исполняется немедленно */
runOnDocumentReadyStateIsComplete();
document.onreadystatechange = () => {
runOnDocumentReadyStateIsComplete();
};
};
kvm();
# Очередь кликов.
В некоторых случаях, программные "нажатия" на HTML-элементы не срабатывают. Например, запрещен запуск видео.
API позволяет имитировать клики реальной мышкой по HTML-элементам. В связи с тем, что каждый клик реальной мышкой занимает время, то чтобы не отслеживать время завершения клика, в API имеется очередь кликов, в которую ставятся задания на клики. Ниже перечислены функции для работы с очередью кликов.
# KeenVision.clickPos( x, y, doubleClick = false )
Добавляет в очередь кликов клик по заданным координатам.
x - смещение от левого края окна браузера в пикселях. Значение -1 соответствует центру окна по горизонтали. y - смещение от верхнего края окна браузера в пикселях. Значение -1 соответствует центру окна по вертикали. doubleClick - true - имитировать двойной клик, параметр отсутствует или false - имитировать одинарный клик
Отсутствует.
# KeenVision.clickElement( element, doubleClick = false )
Добавляет в очередь кликов клик по середине HTML-элемента.
element - HTML-элемент doubleClick - true - имитировать двойной клик, параметр отсутствует или false - имитировать одинарный клик
Отсутствует.
# KeenVision.getClickQueueSize()
Возвращает размер очереди кликов.
Отсутствуют
Целое число - количество невыполненных заданий в очереди кликов. Ноль означает, что все клики выполнены.
# Нажатие клавиши в браузере.
# KeenVision.pressKey(keyCode)
Эмулирует нажатие клавиши в браузере.
keyCode - целое число, код клавиши
Отсутствует.
# Состояние сети.
# KeenVision.isNetworkOk()
Возвращает состояние сетевого интерфейса устройства отображения.
Отсутствуют
true - устройство подключено к сети, false - не подключено.
# Режим "Снимок браузера".
# KeenVision.pageReady(refreshIntervalSec)
Применяется в режиме работы объекта веб-страница "Снимок браузера", сообщает приложению KeenVision Player, что веб-страница готова и можно делать снимок браузера.
refreshIntervalSec - целое число, время в секундах, через которое заново загрузить веб-страницу, допустимые значения 30 и более. Если этот параметр отсутствует, то используется значение объекта веб-страница "Период обновления"
Чтобы сообщить приложению KeenVision Player, что скриншот браузера нужно делать, не сразу после загрузки страницы, а по вызову KeenVision.pageReady, JavaScript должен вернуть значение "waitPageReady".
Пример использования:
function kvmain() {
const main = document.getElementsByTagName('sameElement')[0];
if (!main) return "waitPageReady"; //если какой-то важный элемент не загрузился, то ждем его загрузки
let btn = document.getElementsByClassName('cookie_accept')[0]; //кнопка принять использование куков
if (btn && (btn.offsetParent != null)) KeenVision.clickElement(btn); //нажать кнопку если она есть
setTimeout(function() {KeenVision.pageReady();}, 1000); //подождать 1000мс и сделать снимок браузера
return "waitPageReady";
}
kvmain();
# KeenVision.setBrowserTTL(ttlSec)
После того как сделан снимок браузера, браузер будет уничтожен (для уменьшения потребляемых ресурсов системы) через 120 секунд. Этот метод позволяет изменить это время. Если необходимо, то при последующих отображениях веб-страницы браузер будет создан заново.
ttlSec - целое число, время в секундах, время жизни браузера
# KeenVision.setCacheMode(cacheMode);
Задает режим кэширования веб страницы.
cacheMode - целое число, режим кэширования.
Допустимые значения:
/**
* Режим использования кэша по умолчанию. Если тип навигации не накладывает никаких
* ограничений на поведение, используются кэшированные ресурсы, когда они доступны
* и не просрочены, в противном случае производится загрузка из сети.
*/
KeenVision.LOAD_DEFAULT = -1;
/**
* Кэшированные ресурсы используются, когда они доступны и даже просрочены,
* в противном случае производится загрузка из сети.
*/
KeenVision.LOAD_CACHE_ELSE_NETWORK = 1;
/**
* Всегда производится загрузка из сети
*/
KeenVision.LOAD_NO_CACHE = 2;
/**
* Всегда производится загрузка из кэша
*/
KeenVision.LOAD_CACHE_ONLY = 3;
# KeenVision.getCacheMode();
возвращаемое значение - целое число, режим кэширования.
# KeenVision.saveData(dataObject)
Позволяет сохранить объект с данными, чтобы использовать его при последующем показе веб-страницы
dataObject - Object, сохраняемый объект.
# KeenVision.loadData(defaultDataObject)
Возвращает сохраненный объект с данными.
defaultDataObject - Object, значение по умолчанию, если метод KeenVision.saveData не использовался ранее.
# KeenVision.addUrlFilter(regex, mimeType, disableLoad)
Добавляет фильтр загружаемых ресурсов. При загрузке ресурсов фильтры используются последовательно, друг за другом.
regex - string, регулярное выражение фильтра, который применяется для url ресурса; mimeType - string, mime тип ресурса; disableLoad - boolean, true - не загружать ресурс, false - загрузить ресурс.
Если загрузка ресурса запрещена, то вместо текстовых ресурсов будет загружена пустая строка, а вместо картинок пустой gif. Поэтому для картинок указывайте mimeType : "image/gif".
Учтите, что в регулярных выражениях символ "." является специальным, и должен экранироваться символом "\", а в строке javascript символ "\", также является специальным и тоже должен экранироваться. Поэтому в строке регулярного выражения в javascript, последовательности "\\." будет соответствовать символ "."
Пример, который запрещает загрузку:
- всех javascript с сайта "xxx.zzz";
- всех картинок с любых сайтов, кроме .png с сайта "aaa.bbb".
Код примера:
const stored = KeenVision.loadData({firstStart: true})
if (stored.firstStart) {
stored.firstStart = false;
KeenVision.saveData(stored);
// KeenVision.setCacheMode(KeenVision.LOAD_CACHE_ELSE_NETWORK);
KeenVision.addUrlFilter(".*xxx\\.zzz.*\\.js", "text/javascript", true);
KeenVision.addUrlFilter(".*aaa\\.bbb.*\\.png\\??.*", "image/gif", false);
KeenVision.addUrlFilter(".*\\.(jpe?g|png|gif|bmp|svg|webp|tiff?)\\??.*", "image/gif", true);
}