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

问题描述 投票:0回答:1

我正在制作一个 android 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")

示例测试.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>

我在第

Unexpected token .
行中收到错误
options?.name

为什么带有 可选链接 (

?.
) 的 javascript 不能在 webview 中工作?

javascript android kotlin webview
1个回答
0
投票

我在我的 Android studio 模拟器上的 WEBVIEW 中尝试了这个。并得到相同的错误

Unexpected token .
但这个示例在我实际的 Android 设备上的 WEBVIEW 中运行良好。我认为这个错误是由于 Android studio 模拟器中的错误造成的。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>test</title>
</head>
<body>
  <input type="text" id="txt1" />
  <input type="text" id="txt2" />
  <br>
  <input type="text" id="txt3" />
  <input type="text" id="txt4" />
  <script>
    let options;
    function test1() {
        if (options===undefined){
          return {
            name_exists: 'undefined'
          }
        }else if (options?.name != null) {
            return {
              name_exists: 'success'
            }
        }else{
            return {
            name_exists: 'warning'
          }
        }
    }
    document.getElementById("txt1").value = test1().name_exists;
    options={data:"My Name"};
    document.getElementById("txt2").value = test1().name_exists;
    
    function test2() {
        if (options?.name != null) {
          return {
            name_exists: 'success'
          }
        } else{
          return {
            name_exists: 'warning'
          }
        }
    }
    document.getElementById("txt3").value = test2().name_exists;
    options={name:"My Name"};
    document.getElementById("txt4").value = test2().name_exists;

  </script>
  
</body>
</html>
© www.soinside.com 2019 - 2024. All rights reserved.