ZJsBridge
Это полный набор нативных и веб-протоколов, а также их реализация, которые являются чёткими и понятными для разработки гибридных приложений.
Поддержка API v19+
Поддержка androidx
Реализация на JavaScript: библиотека zfjs-sdk
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.hcanyz:ZJsBridge:$version'
}
class WebView : WebView, IZWebView {
private val zWebHelper: ZWebHelper by lazy { ZWebHelper(this) }
override fun getCurUrl(): String {
return url
}
override fun getCurContext(): Context {
return context
}
override fun getCurZWebHelper(): ZWebHelper {
return zWebHelper
}
override fun execJs(methodName: String, params: String?, valueCallback: ValueCallback<String>?): Unit {
val js: String = if (params.isNullOrBlank()) {
String.format("%s()", methodName)
} else {
String.format("%s('%s')", methodName, params)
}
execJs(js, valueCallback)
}
override fun execJs(sourceJs: String, valueCallback: ValueCallback<String>?) {
if (ZJsBridge.ZJS_DEBUG) ZJsBridge.log("evaluateJavascript:javascript:$sourceJs")
runOnMainThread(Runnable {
evaluateJavascript("javascript:$sourceJs") { valueCallback?.onReceiveValue(it) }
})
}
override fun runOnMainThread(runnable: Runnable): Unit {
if (Looper.getMainLooper() == Looper.myLooper()) {
runnable.run()
return
}
post(runnable)
}
}
addJavascriptInterface(ZJavascriptInterface(this), ZJavascriptInterface.INTERFACE_NAME)
private inner class InnerCustomWebViewClient : WebViewClient() {
override fun onPageFinished(webView: WebView?, s: String?): Unit {
super.onPageFinished(webView, s)
zWebHelper.injectCoreJs()
}
override fun doUpdateVisitedHistory(p0: WebView?, p1: String?, p2: Boolean): Unit {
super.doUpdateVisitedHistory(p0, p1, p2)
zWebHelper.injectCoreJs()
}
}
web_test.getCurZWebHelper().registeredJsApiHandler(this, ZCommonJsHandler::class.java)
web_test.getCurZWebHelper().registeredJsApiHandler(this, ImageJsHandler::class.java)
override fun closeWindow(): Unit {
finish()
}
override fun updateTitle(title: String): Unit {
tv_test_tile.text = title
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?): Unit {
super.onActivityResult(requestCode, resultCode, data)
web_test.getCurZWebHelper().dispatchContainerResult(requestCode, resultCode, data)
}
override fun onDetachedFromWindow(): Unit {
super.onDetachedFromWindow()
web_test.getCurZWebHelper().dispatchContainerDestroy()
}
override fun onBackPressed(): Unit {
if (web_test.canGoBack()) {
web_test.goBack()
} else {
super.onBackPressed()
}
}
В этой библиотеке есть страница тестирования API h5.
В этом проекте уже интегрирован один из упакованных продуктов, который можно скомпилировать и заменить самостоятельно (ZJsBridge\app\src\main\assets).
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )