Horis 1 rok pred
rodič
commit
65086cc21c

+ 1 - 1
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) {

+ 8 - 6
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<ActivityRssReadBinding, ReadRssViewModel>
             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()