android - 在更新到目标 sdk 29 之前,Javascript 无法在 Android WebView 上运行

标签 android android-webview

我正在将本地 html 文件的内容加载到 WebView 中:

context?.assets?.open("SeatingPlan.html")?.bufferedReader().use {
        val some = it?.readText()
        some.let {
            val finalHTML = some!!.replace("{PERFORMANCE-ID}", occurrence.id.toString())
            binding.webView.addJavascriptInterface(SeatingPlanWebAppInterface { ticketData: String ->
                handleTicketSelection(ticketData)
            }, "Android")
            binding.webView.loadData(finalHTML, "text/html; charset=utf-8", "UTF-8")
        }
    }

然后,我有一个监听器,以便在加载完成后触发一些 javascript 函数,如下所示:
binding.webView.settings.javaScriptEnabled = true
    binding.webView.webViewClient = object : WebViewClient() {
        override fun onPageFinished(view: WebView, url: String) {
            super.onPageFinished(view, url)
            binding.webView.loadUrl("javascript:(function() {" + "document.addEventListener('LTD.SeatPlan.OnSeatSelected', e => {Android.seatSelected(JSON.stringify(e.detail))});" + "document.addEventListener('LTD.SeatPlan.OnSeatUnselected', e => {Android.seatUnSelected(JSON.stringify(e.detail))});" + "})();")
        }
    }

相同的代码对于我的应用程序的所有受支持的 android 版本(5.0+)都运行良好,而现在,在更新到目标 sdk 29 后,它卡在加载 html 中,而是显示一个空白的白色屏幕。

我认为该问题可能与对 SDK 所做的更改有关。 29 ,但不知道在哪里寻找解决方案。我认为它可能是目标的原因SDK 29 问题是因为与 WebView 相关的最新更改。制作:https://developer.android.com/about/versions/pie/android-9.0-migration .有解决方法吗?

最佳答案

此更改是 behavioral changes 的一部分安卓派 (28)。

但是,令人惊讶的是 WebView如果 targetSdk版本设置为 28。当您将其更改为 29 时,它会停止在所有真实设备中工作,但它仍然可以在模拟器中工作。

需要调用静态方法setDataDirectorySuffix在初始化您的 WebView 以使其正常工作之前。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
    WebView.setDataDirectorySuffix("your-suffix");
}

关于android - 在更新到目标 sdk 29 之前,Javascript 无法在 Android WebView 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56848736/

相关文章:

javascript - 仅使用 JS 确定 WebView 是否不可见

android - LinkedIn Rest API,状态 token 不匹配

android - 如何在 espresso webview 中选择下拉列表选项

java - 如何从Android上的java webservice获取图像

Android ActivityGroup 在点击时返回第一个 Activity

android - CoordinatorLayout 在 Android Studio 3.1.3 中不起作用?

java - Android AsyncTask 与 ProgressDialog - 空对象引用

android - WebView中页面可见部分的截图

java - Flutter java.io.File android.app.Activity.getExternalFilesDir(java.lang.String)' 在空对象引用上

页面重新加载时未调用 Android Webview onReceivedTitle