为什么在Webview中使用可选链(?.)的JavaScript无法工作?

3

我正在开发一个安卓 Kotlin 项目。

MainActivity 类包含以下代码:

val webView = findViewById<WebView>(R.id.webview)
webView.webViewClient = object : WebViewClient() {
    override fun onPageFinished(view: WebView?, url: String?) {
        val js = "test();"
        webView.evaluateJavascript(js) { result ->
            val json = JSONObject(result)
            val name_exists = json.getString("name_exists")
        }
    }
}
webView.settings.javaScriptEnabled = true;
webView.webChromeClient = object : WebChromeClient() {

    override fun onConsoleMessage(message: ConsoleMessage): Boolean {
        Log.d("MyApplication", "${message.message()} -- From line " +
                "${message.lineNumber()} of ${message.sourceId()}")
        return true
    }
}
webView.loadUrl("file:///android_asset/test.html")

示例 test.html:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>test</title>
</head>
<body>
<script>
    function test() {
        if (options?.name != null) {
          return {
            name_exists: 'success'
          }
        }
        else{
            return {
            name_exists: 'warning'
          }
        }
    }
  </script>
</body>
</html>

我在options?.name的代码行中遇到错误:Unexpected token .

为什么带有可选链?.)的javascript在webview中不能正常工作?


脚本在HTML中如何知道option对象是什么? - undefined
@hrystynaKb 这只是一个例子。在这种情况下,undefined != null。但是使用?.会出现错误消息。 - undefined
明白了!谢谢! 你使用的是哪个 Node 版本? 可选链在 14 版本之前不受支持。 - undefined
你还可以检查一下你的浏览器版本,看看它是否兼容:https://caniuse.com/mdn-javascript_operators_optional_chaining - undefined
@hrystynaKb 这不是Node.js。我正在尝试在Kotlin的Android项目中的WebView中运行这段代码。 - undefined
显示剩余2条评论
1个回答

1

对于可选链接,Chrome版本必须是80或更高。 Android Studio模拟器中的WEBVIEW版本较旧。
例如,我的Android Studio的API29版本的WEBVIEW显示的是Chrome/74。这个版本无法使用可选链接。您可以检查您的浏览器WhatIsMyBrowser或其他网站。
另一方面,实际设备在Android7.0(API24)之后的WEBVIEW中使用最新的Chrome版本。您遇到的错误只会出现在Android模拟器上。
因此,最好将您的build.gradle minSdk设置为24或更高,并在Android Studio中使用最新的API测试您的应用程序。
如果模拟器上有Google Play可用,Android系统的WEBVIEW可以更新到较新的版本。这将是解决问题的有效方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接