我正在制作一个 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 中工作?
我在我的 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>