From 819ff112d480a40662891340392d43fff98f7fe1 Mon Sep 17 00:00:00 2001 From: Xwite <1797350009@qq.com> Date: Sun, 13 Nov 2022 09:47:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(LoginUI):=20=E6=8C=89=E9=92=AE=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E8=B0=83=E7=94=A8=E7=99=BB=E5=BD=95URL=E8=A7=84?= =?UTF-8?q?=E5=88=99=E9=87=8C=E7=9A=84=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/help/ruleHelp.md | 22 ++++++++++++--- app/src/main/assets/updateLog.md | 5 ++-- .../io/legado/app/data/entities/BaseSource.kt | 3 +- .../legado/app/ui/login/SourceLoginDialog.kt | 28 +++++++++---------- 4 files changed, 37 insertions(+), 21 deletions(-) diff --git a/app/src/main/assets/help/ruleHelp.md b/app/src/main/assets/help/ruleHelp.md index b18fac822..73aea93ed 100644 --- a/app/src/main/assets/help/ruleHelp.md +++ b/app/src/main/assets/help/ruleHelp.md @@ -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.调用,可以参考阿里云语音登录 diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 67a78e89b..ee0d341f3 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -11,10 +11,11 @@ * 正文出现缺字漏字、内容缺失、排版错乱等情况,有可能是净化规则或简繁转换出现问题。 * 漫画源看书显示乱码,**阅读与其他软件的源并不通用**,请导入阅读的支持的漫画源! -**2022/11/12** +**2022/11/13** * 订阅添加js注入 -* 登录按钮支持js by Xwite +* 重要更改:登录按钮支持调用登录URL里的函数 by Xwite +* 书源编辑时可修改书源变量,添加平板双页,其他优化 by Horis **2022/11/08** diff --git a/app/src/main/java/io/legado/app/data/entities/BaseSource.kt b/app/src/main/java/io/legado/app/data/entities/BaseSource.kt index 0e35087c3..1e60b2995 100644 --- a/app/src/main/java/io/legado/app/data/entities/BaseSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/BaseSource.kt @@ -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!!!')}") } } diff --git a/app/src/main/java/io/legado/app/ui/login/SourceLoginDialog.kt b/app/src/main/java/io/legado/app/ui/login/SourceLoginDialog.kt index 44f4f580c..5d8b956ec 100644 --- a/app/src/main/java/io/legado/app/ui/login/SourceLoginDialog.kt +++ b/app/src/main/java/io/legado/app/ui/login/SourceLoginDialog.kt @@ -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() } } }