feat(LoginUI): 按钮支持调用登录URL规则里的函数

This commit is contained in:
Xwite 2022-11-13 09:47:18 +08:00 committed by Xwite
parent 84aaa843b5
commit 819ff112d4
4 changed files with 37 additions and 21 deletions

View File

@ -22,7 +22,8 @@
> 启用后会自动保存每次返回头中的Set-Cookie中的值适用于验证码图片一类需要session的网站
* 登录UI
> 不使用内置webView登录网站需要使用`登录URL`规则实现登录逻辑,可使用`登录检查JS`检查登录结果
> 不使用内置webView登录网站需要使用`登录URL`规则实现登录逻辑,可使用`登录检查JS`检查登录结果
> 版本20221113重要更改按钮支持调用`登录URL`规则里面的函数,必须实现`login`函数
```
规则填写示范
[
@ -42,12 +43,25 @@
{
name: "获取验证码",
type: "button",
action: "java.ajax(...)"
action: "getVerificationCode()"
}
]
按钮的action为JavaScript时获取登录信息
```
* 登录URL
> 可填写登录链接或者实现登录UI的登录逻辑的JavaScript
```
示范填写
function login() {
java.log("模拟登录请求");
java.log(source.getLoginInfoMap());
}
function getVerificationCode() {
java.log("登录UI按钮获取到手机号码"+result.get("telephone"))
}
登录按钮函数获取登录信息
result.get("telephone")
点击确定登录后在js中获取读取登录信息
login函数获取登录信息
source.getLoginInfo()
source.getLoginInfoMap().get("telephone")
source登录相关方法,可在js内通过source.调用,可以参考阿里云语音登录

View File

@ -11,10 +11,11 @@
* 正文出现缺字漏字、内容缺失、排版错乱等情况,有可能是净化规则或简繁转换出现问题。
* 漫画源看书显示乱码,**阅读与其他软件的源并不通用**,请导入阅读的支持的漫画源!
**2022/11/12**
**2022/11/13**
* 订阅添加js注入
* 登录按钮支持js by Xwite
* 重要更改登录按钮支持调用登录URL里的函数 by Xwite
* 书源编辑时可修改书源变量,添加平板双页,其他优化 by Horis
**2022/11/08**

View File

@ -49,9 +49,10 @@ interface BaseSource : JsExtensions {
}
}
// 调用login函数 实现登录请求
fun login() {
getLoginJs()?.let {
evalJS(it)
evalJS("$it\nif(typeof login=='function'){login.apply(this);}else{throw('Function login not implements!!!')}")
}
}

View File

@ -70,10 +70,12 @@ class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) {
context?.openUrl(rowUi.action!!)
} else {
// JavaScript
rowUi.action?.let {
rowUi.action?.let { buttonFunctionJS ->
kotlin.runCatching {
source.evalJS(it) {
put("result", getLoginData(loginUi))
source.getLoginJs()?.let { loginJS ->
source.evalJS("$loginJS\n$buttonFunctionJS") {
put("result", getLoginData(loginUi))
}
}
}.onFailure {
AppLog.put("LoginUI Button ${rowUi.name} JavaScript error", it)
@ -128,18 +130,16 @@ class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) {
dismiss()
}
} else if (source.putLoginInfo(GSON.toJson(loginData))) {
source.getLoginJs()?.let {
try {
source.evalJS(it)
context?.toastOnUi(R.string.success)
withContext(Main) {
dismiss()
}
} catch (e: Exception) {
AppLog.put("登录出错\n${e.localizedMessage}", e)
context?.toastOnUi("登录出错\n${e.localizedMessage}")
e.printOnDebug()
try {
source.login()
context?.toastOnUi(R.string.success)
withContext(Main) {
dismiss()
}
} catch (e: Exception) {
AppLog.put("登录出错\n${e.localizedMessage}", e)
context?.toastOnUi("登录出错\n${e.localizedMessage}")
e.printOnDebug()
}
}
}