【发布时间】:2021-05-23 16:25:21
【问题描述】:
我正在尝试在 web 视图中显示的网页中填写表单。
到目前为止,我设法使用与 iOS 版本应用程序相同的 JS 代码隐藏了原始网页登录按钮:
senseLoginButtonDisplayStatus = "document.getElementById('loginbtn').style.display = 'none';"
wvMainView!!.loadUrl("javascript:(function f() { ${senseLoginButtonDisplayStatus} } )()")
但是,我无法填写表格。 JS 代码在应用程序的 iOS 版本和浏览器控制台中运行良好,但此处不适用:
override fun onPageFinished(view: WebView?, url: String)
{
val currentURL: String? = wvMainView!!.url
if(userIsLoggedIn == false)
{
userIsLoggedIn = true
checkLoginURL()
}
if(currentURL!!.contains("targetId"))
{
senseLoginButtonDisplayStatus = "document.getElementById('loginbtn').style.display = 'none';"
wvMainView!!.loadUrl("javascript:(function f() { ${senseLoginButtonDisplayStatus} } )()")
}
}
fun checkLoginURL()
{
val currentURL: String? = wvMainView!!.url
val result: Boolean? = currentURL!!.contains("form")
if(result == true)
{
senseSubmitJS = "document.getElementById('login-form').submit();"
senseUserJS = "document.getElementsByName('username')[0].value = '${serverSettings!!.serverUser}';"
sensePassJS = "document.getElementsByName('pwd')[0].value = '${serverSettings!!.serverPassword}';"
Log.i("MyApp","MainActivity > checkLoginURL > ${senseSubmitJS}")
Log.i("MyApp","MainActivity > checkLoginURL > ${senseUserJS}")
Log.i("MyApp","MainActivity > checkLoginURL > ${sensePassJS}")
wvMainView!!.loadUrl("javascript:(function f() { ${senseUserJS} } )()")
wvMainView!!.loadUrl("javascript:(function f() { ${sensePassJS} } )()")
btnLogin!!.isVisible = true
}
}
这就是 3 Logs 打印的内容。这适用于 iOS 和浏览器控制台。
MainActivity > checkLoginURL > document.getElementById('login-form').submit();
MainActivity > checkLoginURL > document.getElementsByName('username').value = 'domain\username';
MainActivity > checkLoginURL > document.getElementsByName('pwd')[0].value = 'password';
我不确定我做错了什么。 自从我使用 Kotlin 以来已经有一段时间了,所以我很确定我错过了一些简单的东西,但我仍然无法弄清楚。
在我的 webview 中启用了 JS,我确实尝试遵循一些指南,试图弄清楚。
wvMainView!!.settings.domStorageEnabled = true;
wvMainView!!.settings.javaScriptEnabled = true
wvMainView!!.settings.loadWithOverviewMode = true
wvMainView!!.settings.useWideViewPort = true
https://medium.com/@skywall/inject-js-into-androids-webview-8845fb5902b7
还有其他人问了完全相同的问题,答案正是我想要做的,但是......
fill form programmatically in Android Webview - JavaScript
有什么想法吗?
【问题讨论】:
标签: javascript kotlin webview