目标:通过给定的 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 的序列化库。也没有运气。