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 a7229cd19..f0cb8c7b7 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 @@ -235,12 +235,12 @@ interface BaseSource : JsExtensions { @Throws(Exception::class) fun evalJS(jsStr: String, bindingsConfig: ScriptBindings.() -> Unit = {}): Any? { val bindings = buildScriptBindings { bindings -> - bindings.apply(bindingsConfig) bindings["java"] = this bindings["source"] = this bindings["baseUrl"] = getKey() bindings["cookie"] = CookieStore bindings["cache"] = CacheManager + bindings.apply(bindingsConfig) } val sharedScope = getShareScope() val scope = if (sharedScope == null) { diff --git a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt index 9955768d9..d2b26a9db 100644 --- a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt +++ b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt @@ -25,7 +25,7 @@ import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.size import androidx.lifecycle.lifecycleScope -import com.script.rhino.RhinoScriptEngine +import com.script.rhino.runScriptWithContext import io.legado.app.R import io.legado.app.base.VMBaseActivity import io.legado.app.constant.AppConst @@ -473,11 +473,13 @@ class ReadRssActivity : VMBaseActivity val source = viewModel.rssSource val js = source?.shouldOverrideUrlLoading if (!js.isNullOrBlank()) { - val result = RhinoScriptEngine.runCatching { - eval(js) { - put("java", rssJsExtensions) - put("url", url.toString()) - }.toString() + val result = kotlin.runCatching { + runScriptWithContext(lifecycleScope.coroutineContext) { + source.evalJS(js) { + put("java", rssJsExtensions) + put("url", url.toString()) + }.toString() + } }.onFailure { AppLog.put("url跳转拦截js出错", it) }.getOrNull()