我正在开发一个 Android 应用程序,并且正在使用 Web 视图来显示 Web 内容。目前,该网页在 webviews 中显示良好,我们正在确认该网页更改为点击事件。
我想使用 webview 上的 addJavascriptInterface 将 JavaScript 发送的返回值带回我的 Android 应用程序。
有谁能详细解释一下吗?
我已经运行了 24 小时来修改代码,但我仍然不知道它是如何正常工作的。
我刚开始使用 Kotlin 开发 Android,我没有使用 Java 脚本开发 Web 的经验。
这是我的应用程序屏幕的 web 视图的代码内容。
mBinding.wvWriteIssue.apply {
settings.domStorageEnabled = true
settings.loadWithOverviewMode = true
settings.useWideViewPort = false
settings.builtInZoomControls = true
settings.displayZoomControls = false
settings.setSupportZoom(true)
settings.defaultTextEncodingName = "utf-8"
settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
getSettings().run {
javaScriptEnabled = true
setJavaScriptCanOpenWindowsAutomatically(true)
setSupportMultipleWindows(true)
}
addJavascriptInterface(AndroidIssueMarker(), "capturedMarker")
loadUrl(MyUrl)
}
如果您在使用 Java 脚本界面的代码中使用“android”,则通过 webview 单击内容可以正常工作,但我无法验证返回值。如果您通过在您交付给 Web 开发人员的应用的 JavaScript 接口中插入函数名称来创建接口,它将正常打印在屏幕上,但不会点击内容。
我在这部分找不到解决方案。
我的 javascript 接口类的代码。
inner class AndroidIssueMarker {
@android.webkit.JavascriptInterface
fun capturedMarker(location: String) {
Handler(Looper.getMainLooper()).post {
val message = location
message?.let {
showToast(message)
}
Log.e("testerWebview", "location value -> $location")
}
showToast("테스트중 -> ${location}")
}
@android.webkit.JavascriptInterface
fun capturedMarker() {
Handler(Looper.getMainLooper()).post {
//toastMessage **
showToast("location값 없이 들어옴")
Log.e("testerWebview", "null location function")
}
showToast("테스트중 -> ${location}")
}
}
我检查了 Internet 权限并指定了 Web 视图的设置,以便我可以在 Web 视图中看到内容。
这可能很奇怪,因为代码是用来查看各种内容并修改它们并接收返回值的。
我想知道如何从 Android webview 中显示的 Java 脚本网页获取文本并将其打印在屏幕上或从我的应用程序接收数据。
我想知道的是如何从 Web 开发人员那里获得我想要的字符串以及 Web 开发人员发送给我的确切内容。
我不擅长开发来单独解决这个问题。
如果你详细解释一下,我可以得到很多帮助。
如果你能给我一个答案,我将不胜感激。