mirror of
https://github.com/gedoor/legado.git
synced 2024-08-30 09:23:26 +08:00
feat(LoginUI): 按钮支持调用登录URL规则里的函数
This commit is contained in:
parent
84aaa843b5
commit
819ff112d4
@ -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.调用,可以参考阿里云语音登录
|
||||
|
@ -11,10 +11,11 @@
|
||||
* 正文出现缺字漏字、内容缺失、排版错乱等情况,有可能是净化规则或简繁转换出现问题。
|
||||
* 漫画源看书显示乱码,**阅读与其他软件的源并不通用**,请导入阅读的支持的漫画源!
|
||||
|
||||
**2022/11/12**
|
||||
**2022/11/13**
|
||||
|
||||
* 订阅添加js注入
|
||||
* 登录按钮支持js by Xwite
|
||||
* 重要更改:登录按钮支持调用登录URL里的函数 by Xwite
|
||||
* 书源编辑时可修改书源变量,添加平板双页,其他优化 by Horis
|
||||
|
||||
**2022/11/08**
|
||||
|
||||
|
@ -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!!!')}")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user