Использование собственных стилей CSS и сценариев JS в Android WebViews
Android WebViews позволяет загружать пользовательский код CSS и JavaScript в содержимое загруженной веб-страницы.
Все, что вам нужно сделать, это переопределить onPageFinished
функцию WebViewClient, которую вы предоставляете своему WebView, и вызвать loadUrl
с вашим пользовательским кодом.
Лучший способ приблизиться к этому - создать соответствующие узлы JavaScript для вашего кода; узел style
для CSS и узел script
для JavaScript. Давайте сейчас напишем эти сценарии, ладно?
Следующий код JavaScript создает новый узел в модели DOM, содержащий предоставляемый нами стиль CSS.
var node = document.createElement('style'); node.type = 'text/css'; node.innerHTML = 'MY_CSS_STYLE'; document.head.appendChild(node);
Следующий код JavaScript создает новый узел в DOM, содержащий сценарий JS, который мы ему предоставляем.
var node = document.createElement('script'); node.type = 'text/javascript'; node.innerHTML = 'MY_JS_SCRIPT'; document.body.appendChild(node);
Чтобы заставить приведенный выше код работать и правильно создавать узлы после загрузки содержимого веб-страницы, нам нужно обернуть его самозапускающейся функцией JavaScript. Это тоже несложно.
javascript:(function() { MY_JS_CODE })()
Так как же объединить все вышеперечисленное и внедрить код в Android WebView?
Возвращаясь к функции onPageFinished реализации WebViewClient, давайте добавим очень простой стиль, который придаст Google темную тему; код находится в Kotlin с использованием многострочного строкового оператора.
override fun onPageFinished(view: WebView, url: String) { val code = """javascript:(function() { var node = document.createElement('style'); node.type = 'text/css'; node.innerHTML = 'body { color: white; background-color: black; }'; document.head.appendChild(node); })()""".trimIndent() loadUrl(code) }
Сделанный!
Вы можете найти вышеуказанные функции в аккуратной небольшой библиотеке, которую я разработал, под названием VeinView. Он объединяет все вышеперечисленное в настраиваемый WebView и настраиваемый клиент и позволяет загружать строковый код или RAW-ресурсы Android.
Счастливых праздников!