使用 WebView 评估Javascript 未按预期工作

时间:2021-06-02 17:29:47

标签: javascript android kotlin webview android-webview

目标:通过给定的 WebView 将网站上的 Javascript 全局变量设置为 JSON 对象。

问题:我首先尝试使用下面的代码片段。我能够将全局 Javascript 变量设置为原始整数就好了。我在将变量设置为 String 或 JSON 对象时遇到问题。

MainActivity.kt

tidyverse

WebViewClientImpl.kt

class HostActivity : AppCompatActivity() {

  @SuppressLint("SetJavaScriptEnabled")
  override fun onCreate(savedInstanceState: Bundle?) {
    ...
    webView.apply {
      settings.defaultTextEncodingName = "utf-8"
      settings.javaScriptEnabled = true
      settings.builtInZoomControls = true
      settings.domStorageEnabled = true
      settings.loadWithOverviewMode = true
      settings.useWideViewPort = true
      settings.displayZoomControls = true
      isVerticalScrollBarEnabled = true
      isHorizontalScrollBarEnabled = true
      webViewClient = WebViewClientImpl()
      loadUrl("SOME URL")
    }
    ...
  }
}

预期:我希望将全局 Javascript 变量设置为特定对象。

实际:我在 Logcat 中收到此错误: class WebViewClientImpl : WebViewClient() { override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { super.onPageStarted(view, url, favicon) setGlobalJSVariable(view) } private fun setGlobalJSVariable(view: WebView?) { val globalJSVariable = "javascript: globalJSVariable = "{\"someKey\":\"someValue\"}";" view?.evaluateJavascript(globalJSVariable, null) } }

尝试 1:我尝试过: I/chromium: [INFO:CONSOLE(1)] "Uncaught SyntaxError: Unexpected token ':'", source: <WebView url> (1) 但是,这不适用于简单的原始整数,因此无法与 JSON 对象一起使用。

尝试 2:我也尝试过在字符串上使用编码器,但没有成功。

val globalJSVariable = """<script>globalJSVariable = 1234567890</script>"""

尝试 3:另一个尝试是使用 Moshi 的序列化库。也没有运气。

0 个答案:

没有答案