From c3502fa6ea513644ab246781c305346de4c4d2e1 Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 17 Apr 2023 10:26:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/model/SharedJsScope.kt | 10 ++++------ app/src/main/java/io/legado/app/utils/Rhino.kt | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/io/legado/app/utils/Rhino.kt diff --git a/app/src/main/java/io/legado/app/model/SharedJsScope.kt b/app/src/main/java/io/legado/app/model/SharedJsScope.kt index 4b1f679da..84d183a45 100644 --- a/app/src/main/java/io/legado/app/model/SharedJsScope.kt +++ b/app/src/main/java/io/legado/app/model/SharedJsScope.kt @@ -7,9 +7,9 @@ import io.legado.app.help.http.newCallStrResponse import io.legado.app.help.http.okHttpClient import io.legado.app.utils.GSON import io.legado.app.utils.MD5Utils +import io.legado.app.utils.Rhino import io.legado.app.utils.isAbsUrl import io.legado.app.utils.isJsonObject -import org.mozilla.javascript.Context import org.mozilla.javascript.Scriptable import java.lang.ref.WeakReference import kotlin.collections.set @@ -27,8 +27,7 @@ object SharedJsScope { if (scope == null) { val context = SCRIPT_ENGINE.getScriptContext(SimpleBindings()) scope = SCRIPT_ENGINE.getRuntimeScope(context) - val rhino = Context.enter() - rhino.runCatching { + Rhino.use { if (jsLib.isJsonObject()) { val jsMap: Map = GSON.fromJson( jsLib, @@ -43,14 +42,13 @@ object SharedJsScope { val js = okHttpClient.newCallStrResponse { url(value) }.body - evaluateString(scope, js, "jsLib", 1, null) + it.evaluateString(scope, js, "jsLib", 1, null) } } } else { - evaluateString(scope, jsLib, "jsLib", 1, null) + it.evaluateString(scope, jsLib, "jsLib", 1, null) } } - Context.exit() scopeMap[key] = WeakReference(scope) } return scope diff --git a/app/src/main/java/io/legado/app/utils/Rhino.kt b/app/src/main/java/io/legado/app/utils/Rhino.kt new file mode 100644 index 000000000..d0ed3a56e --- /dev/null +++ b/app/src/main/java/io/legado/app/utils/Rhino.kt @@ -0,0 +1,16 @@ +package io.legado.app.utils + +import org.mozilla.javascript.Context + +object Rhino { + + inline fun use(block: (Context) -> R): R { + val context = Context.enter() + return try { + block.invoke(context) + } finally { + Context.exit() + } + } + +} \ No newline at end of file