Гайд [Mobile] WebViews - android webview like a CEF (HTML interfaces)

Radare

Участник
Автор темы
12
77
WebViews
(android webview like a CEF)


Библиотека для создания простых браузеров/интерфейсов (используя HTML, CSS, JS) с помощью Java & Android WebView
В основе для подгрузки Java кода используется JNI C API с помощью библиотеки android от OSPx

Функции
ФункцияОписаниеПример использования
createBrowser(id, url)Создает браузер с заданным ID и URL
Lua:
lib.createBrowser(1, "https://example.com")
createBrowserFromFile(id, file)Создает браузер, загружая HTML-файл локально (с папки monetloader)
Lua:
lib.createBrowserFromFile(2, "file:///html/interface.html") -- создаст браузер с файла
-- Android/media/package/monetloader/html/interface.html
deleteBrowser(id)Удаляет браузер по ID
Lua:
lib.deleteBrowser(1)
setVisible(id, bool)Показывает или скрывает браузер
Lua:
lib.setVisible(1, true) -- виден
setClickable(id, bool)Делает браузер кликабельным/некликабельным (клики не доходят до игры)
Lua:
lib.setClickable(1, true) -- кликабелен
setClickableAsync(id, bool)Асинхронно переключает кликабельность (в Java отправляются только собранные клики с onTouch, соответственно клики доходят и до игры, и до браузера)
Lua:
lib.setClickableAsync(1, true)
setPos(id, x, y)Устанавливает позицию браузера
Lua:
lib.setPos(1, 0, 0)
setSize(id, width, height)Устанавливает размер браузера
Lua:
lib.setSize(1, 1920, 1080)
changeUrl(id, url)Меняет URL текущего браузера
Lua:
lib.changeUrl(1, "https://example.com/other")
executeJS(id, script)Выполняет JavaScript в браузере
Lua:
lib.executeJS(1, "alert('Hello')")
getJSValue(id, script)Выполняет JS и возвращает результат как строку
Lua:
local result = lib.getJSValue(1, "document.title")
print("Title:", result)
showCloseButton(id, bool)Показывает или скрывает кнопку закрытия
(в левом углу экрана)
1746228265398.png
Lua:
lib.showCloseButton(1, true)
setSetting(id, name, bool)Устанавливает настройку (WebSettings getSettings())
Lua:
lib.setSetting(1, "setJavaScriptEnabled", true) -- в Java выглядит так:
-- webView.getSettings().setJavaScriptEnabled(true);
addLog(msg)Добавляет запись в лог webviews.log
Lua:
lib.addLog("Browser created")
sendClick(id, type, clickid, x, y)Отправляет клик в браузер по координатам (используется для setClickableAsync)
Lua:
lib.sendClick(1, 0, 1001, 300, 400)
canGoForward(id)Проверяет возможность перейти вперед у браузера
Lua:
if lib.canGoForward(1) then ... end
canGoBack(id)Проверяет возможность перейти назад у браузера
Lua:
if lib.canGoBack(1) then ... end
goForward(id)Переходит вперед в браузере
Lua:
lib.goForward(1)
goBack(id)Переходит назад в браузере
Lua:
lib.goBack(1)
getStatus(id)Проверяет загружен ли браузер
Lua:
if lib.getStatus(1) then ... end
getVersion()Возвращает версию библиотеки (JSON)
Lua:
local version = lib.getVersion()
print(version.name, version.code)
getBrowsers()Возвращает список браузеров (JSON)
Lua:
local list = lib.getBrowsers()
for i, id in ipairs(list) do ... end -- id = browser
getScreen(id)Возвращает изображение экрана браузера (не доделано и нестабильно. при вызове только сохраняет текущий кадр и отдает только при следующем вызове, в base64)
Lua:
local screen = lib.getScreen(1)
restartCallback()Перезапускает callback с другим портом (если onAction не работает)
Lua:
lib.restartCallback()


Общий callback - lib.onAction(data)
Основные значения - data.type & data.browserid​
data.typeОписаниеПример действия
"PING"Проверка состояния (если data.msg == "STATUS_OK")
Lua:
print("Скрипт доступен к работе")
"WV_ANSWER"Ответ из браузера (console.log)
Lua:
print("Сообщение с JS:", data.msg)
"WV_DIE"Браузер умер (встречается часто, и к сожалению полное состояние восстановить невозможно, но основные данные возвращаются)
Lua:
local browser = cjson.decode(data.msg)
lib.deleteBrowser(data.browserid)
lib.createBrowser(data.browserid, browser.url)
lib.setPos(data.browserid, browser.x, browser.y)
lib.setSize(data.browserid, browser.width, browser.height)
lib.setVisible(data.browserid, browser.visible)
"WV_ERROR"Ошибка браузера
Lua:
error(data.msg)
"WV_CLOSE"Пользователь нажал на кнопку закрытия (showCloseButton)
Lua:
print("Браузер "..data.browserid.." закрыт")
"WV_LOADED"Браузер загрузился
Lua:
print("Браузер с URL: "..data.msg.." доступен к работе")
"WV_PROGRESS"Этап загрузки браузера
Lua:
print("Бразуер загружен на "..data.msg.."%")

Примерный скрипт с обработчиком:
callback:
local lib = require("webviews")

function lib.onAction(data)
    if data.type == "PING" then
        if data.msg == "STATUS_OK" then
            print("Скрипт доступен к работе")
            lib.createBrowser(0, "https://example.com")
            lib.setVisible(0, true)
            lib.setClickable(0, true)
            lib.showCloseButton(0, true)
        end
    elseif data.type == "WV_ANSWER" then
        print("Сообщение с JS:", data.msg)
    elseif data.type == "WV_DIE" then
        local browser = cjson.decode(data.msg)
        lib.deleteBrowser(data.browserid)
        lib.setPos(data.browserid, browser.x, browser.y)
        lib.setSize(data.browserid, browser.width, browser.height)
        lib.createBrowser(data.browserid, browser.url)
        lib.setVisible(data.browserid, browser.visible)
    elseif data.type == "WV_ERROR" then
        error(data.msg)
    elseif data.type == "WV_CLOSE" then
        print("Браузер "..data.browserid.." закрыт")
        lib.deleteBrowser(data.browserid)
    elseif data.type == "WV_LOADED" then
        print("Браузер с URL: "..data.msg.." доступен к работе")
    elseif data.type == "WV_PROGRESS" then
        print("Браузер загружен на "..data.msg.."%")
    end
end

Видео с работой браузеров:

Установка:
Папку lib с архива переместить в папку monetloader
Архив содержит сразу и android и webviews библиотеки
 

Вложения

  • lib.zip
    36.8 KB · Просмотры: 6
Последнее редактирование: