This commit is contained in:
Horis
2024-11-20 16:19:44 +08:00
parent 3e563f4a30
commit 6cf5036137
2 changed files with 43 additions and 28 deletions
@@ -5,7 +5,6 @@ import android.net.http.SslError
import android.os.Handler
import android.os.Looper
import android.util.AndroidRuntimeException
import android.util.Log
import android.webkit.CookieManager
import android.webkit.SslErrorHandler
import android.webkit.WebResourceRequest
@@ -19,7 +18,6 @@ import io.legado.app.help.coroutine.Coroutine
import io.legado.app.utils.runOnUI
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Runnable
import kotlinx.coroutines.delay
import kotlinx.coroutines.suspendCancellableCoroutine
import kotlinx.coroutines.withTimeout
import org.apache.commons.text.StringEscapeUtils
@@ -40,7 +38,7 @@ class BackstageWebView(
private val sourceRegex: String? = null,
private val overrideUrlRegex: String? = null,
private val javaScript: String? = null,
private val delayTime: Long = 1000,
private val delayTime: Long = 0,
) {
private val mHandler = Handler(Looper.getMainLooper())
@@ -149,13 +147,11 @@ class BackstageWebView(
override fun onPageFinished(view: WebView, url: String) {
setCookie(url)
mHandler.postDelayed({
if (runnable == null) {
runnable = EvalJsRunnable(view, url, getJs())
}
mHandler.removeCallbacks(runnable!!)
mHandler.postDelayed(runnable!!, 1000)
}, delayTime)
if (runnable == null) {
runnable = EvalJsRunnable(view, url, getJs())
}
mHandler.removeCallbacks(runnable!!)
mHandler.postDelayed(runnable!!, 1000 + delayTime)
}
@SuppressLint("WebViewClientOnReceivedSslError")
@@ -182,7 +178,6 @@ class BackstageWebView(
private fun handleResult(result: String) = Coroutine.async {
if (result.isNotEmpty() && result != "null") {
Log.d("BackstageWebView", "result: $result")
val content = StringEscapeUtils.unescapeJson(result)
.replace(quoteRegex, "")
try {
@@ -262,12 +257,10 @@ class BackstageWebView(
override fun onPageFinished(webView: WebView, url: String) {
setCookie(url)
mHandler.postDelayed({
if (!javaScript.isNullOrEmpty()) {
val runnable = LoadJsRunnable(webView, javaScript)
mHandler.postDelayed(runnable, 1000L)
}
}, delayTime)
if (!javaScript.isNullOrEmpty()) {
val runnable = LoadJsRunnable(webView, javaScript)
mHandler.postDelayed(runnable, 1000L + delayTime)
}
}
@SuppressLint("WebViewClientOnReceivedSslError")
@@ -21,9 +21,31 @@ import io.legado.app.help.JsExtensions
import io.legado.app.help.config.AppConfig
import io.legado.app.help.exoplayer.ExoPlayerHelper
import io.legado.app.help.glide.GlideHeaders
import io.legado.app.help.http.*
import io.legado.app.help.http.BackstageWebView
import io.legado.app.help.http.CookieManager
import io.legado.app.help.http.CookieManager.mergeCookies
import io.legado.app.utils.*
import io.legado.app.help.http.CookieStore
import io.legado.app.help.http.RequestMethod
import io.legado.app.help.http.StrResponse
import io.legado.app.help.http.addHeaders
import io.legado.app.help.http.get
import io.legado.app.help.http.getProxyClient
import io.legado.app.help.http.newCallResponse
import io.legado.app.help.http.newCallStrResponse
import io.legado.app.help.http.postForm
import io.legado.app.help.http.postJson
import io.legado.app.help.http.postMultipart
import io.legado.app.utils.EncoderUtils
import io.legado.app.utils.GSON
import io.legado.app.utils.NetworkUtils
import io.legado.app.utils.fromJsonArray
import io.legado.app.utils.fromJsonObject
import io.legado.app.utils.get
import io.legado.app.utils.isJson
import io.legado.app.utils.isJsonArray
import io.legado.app.utils.isJsonObject
import io.legado.app.utils.isXml
import io.legado.app.utils.splitNotBlank
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
import okhttp3.MediaType.Companion.toMediaType
@@ -87,7 +109,7 @@ class AnalyzeUrl(
private var webJs: String? = null
private val enabledCookieJar = source?.enabledCookieJar ?: false
private val domain: String
private var delayTime: Long? = null
private var webViewDelayTime: Long = 0
// 服务器ID
var serverID: Long? = null
@@ -216,7 +238,7 @@ class AnalyzeUrl(
}
}
serverID = option.getServerID()
delayTime = option.getDelayTime()
webViewDelayTime = max(0, option.getWebViewDelayTime() ?: 0)
}
}
urlNoQuery = url
@@ -436,7 +458,7 @@ class AnalyzeUrl(
javaScript = webJs ?: jsStr,
sourceRegex = sourceRegex,
headerMap = headerMap,
delayTime = delayTime ?:1000
delayTime = webViewDelayTime
).getStrResponse()
}
@@ -446,7 +468,7 @@ class AnalyzeUrl(
javaScript = webJs ?: jsStr,
sourceRegex = sourceRegex,
headerMap = headerMap,
delayTime = delayTime ?:1000
delayTime = webViewDelayTime
).getStrResponse()
}
} else {
@@ -712,7 +734,7 @@ class AnalyzeUrl(
/**
* webview等待页面加载完毕的延迟时间(毫秒)
*/
private var delayTime: Long? = null,
private var webViewDelayTime: Long? = null,
) {
fun setMethod(value: String?) {
method = if (value.isNullOrBlank()) null else value
@@ -820,12 +842,12 @@ class AnalyzeUrl(
return serverID
}
fun setDelayTime(value: String?) {
delayTime = if (value.isNullOrBlank()) null else value.toLong()
fun setWebViewDelayTime(value: String?) {
webViewDelayTime = if (value.isNullOrBlank()) null else value.toLong()
}
fun getDelayTime(): Long? {
return delayTime
fun getWebViewDelayTime(): Long? {
return webViewDelayTime
}
}