首页 > 解决方案 > 关于在 Android Webview 中使用 Javascripts 内容的问题

问题描述

我正在开发一个 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 开发人员发送给我的确切内容。

我不擅长开发来单独解决这个问题。

如果你详细解释一下,我可以得到很多帮助。

如果你能给我一个答案,我将不胜感激。

标签: javascriptandroidwebviewweb-content

解决方案


推荐阅读