【问题标题】:Android[Kotlin] - ERROR TypeError: ["Android"].showToast is not a functionAndroid[Kotlin] - 错误 TypeError: ["Android"].showToast 不是函数
【发布时间】:2021-11-13 11:36:11
【问题描述】:

我正在使用 WebChromeClient() 在 webview 中加载网页。每当用户从该下拉列表中选择我需要显示敬酒的项目时,该网页都有一个下拉列表。为此,我关注official doc 我已经实现了与文档所说的相同。仍然,我在控制台中收到错误。 “showToast 不是函数”。

在片段中:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val webSettings = webView.settings
    webSettings.javaScriptEnabled = true
    webSettings.domStorageEnabled = true
    webSettings.databaseEnabled = true
    webView.addJavascriptInterface(WebAppInterface(requireContext()), "Android")

    webView.webChromeClient = object : WebChromeClient() {
        override fun onConsoleMessage(consoleMessage: ConsoleMessage): Boolean {
            Log.i(TAG, consoleMessage.message())
            return true
        }

        override fun onProgressChanged(view: WebView?, newProgress: Int) {
            super.onProgressChanged(view, newProgress)
            if (newProgress == 100) {
                if (webView != null) {
                    webView.settings.builtInZoomControls = true
                    webView.settings.displayZoomControls = false
                    webView.loadUrl("javascript:loadMobileDashboard($data);")
                }
            }
        }
    }
    webView.loadUrl(url)
}

WebAppInterface:

class WebAppInterface(private val context: Context) {
    private val TAG = WebAppInterface::class.java.simpleName

    @JavascriptInterface
    fun showToast(toast: String) {
        Log.d(TAG, "showToast: $toast")
    }
}

我尝试了一些更改并在互联网上搜索了它并没有解决单一的解决方案。请让我知道我在这里犯了什么错误。谢谢:)

【问题讨论】:

    标签: javascript android kotlin webview


    【解决方案1】:

    在您的资产文件夹中创建一个 html 页面,假设命名为 dropDown.html。

    将此代码复制到该文件中

    <input type="dropDown" value="Hello" onClick="showToastInWebView('strMsg')" />
    
    <script type="text/javascript">
        function showToastInWebView(toast) {
            Android.showToast(toast);
        }
    </script>
    

    现在像这样加载网址

    myWebView.loadUrl("file:///android_asset/dropDown.html");
    

    注意:webView不调用JS函数你已经添加了一个桥接,你需要使用你自己的网页(在本例中为dropDown.html)确实调用了该函数,本地(我们的案例)或网络上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-18
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      相关资源
      最近更新 更多