Skip to content
This repository was archived by the owner on Jul 16, 2024. It is now read-only.

Commit f0e3540

Browse files
committed
优化 CompatWebView 中链接拦截的逻辑
1 parent 3cc2000 commit f0e3540

File tree

2 files changed

+9
-12
lines changed

2 files changed

+9
-12
lines changed

web/src/main/kotlin/io/goooler/demoapp/web/CompatWebView.kt

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import android.net.http.SslError
66
import android.util.AttributeSet
77
import android.view.ViewGroup
88
import android.webkit.SslErrorHandler
9-
import android.webkit.URLUtil
109
import android.webkit.ValueCallback
1110
import android.webkit.WebChromeClient
1211
import android.webkit.WebSettings
@@ -70,14 +69,7 @@ open class CompatWebView(context: Context, attrs: AttributeSet? = null) : WebVie
7069
}
7170

7271
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
73-
return if (URLUtil.isValidUrl(url)) {
74-
if (URLUtil.isNetworkUrl(url)) {
75-
false
76-
} else {
77-
onEventListener?.onInterceptUri(Uri.parse(url))
78-
true
79-
}
80-
} else false
72+
return onEventListener?.onInterceptUrl(url) ?: false
8173
}
8274

8375
override fun onPageFinished(view: WebView, url: String) {
@@ -119,7 +111,7 @@ open class CompatWebView(context: Context, attrs: AttributeSet? = null) : WebVie
119111
}
120112

121113
interface OnEventListener {
122-
fun onInterceptUri(uri: Uri)
114+
fun onInterceptUrl(url: String): Boolean
123115

124116
fun onReceivedTitle(title: String)
125117

web/src/main/kotlin/io/goooler/demoapp/web/WebFragment.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import android.webkit.WebChromeClient
88
import androidx.activity.result.ActivityResultLauncher
99
import androidx.activity.result.contract.ActivityResultContracts
1010
import androidx.annotation.IntRange
11+
import androidx.core.net.toUri
12+
import io.goooler.demoapp.base.util.isNetworkUrl
1113
import io.goooler.demoapp.base.util.putArguments
1214
import io.goooler.demoapp.base.util.toMimeType
1315
import io.goooler.demoapp.common.base.binding.BaseBindingFragment
@@ -51,8 +53,11 @@ class WebFragment : BaseBindingFragment<WebFragmentBinding>() {
5153
}
5254

5355
private val listener = object : CompatWebView.OnEventListener, JsInterface {
54-
override fun onInterceptUri(uri: Uri) {
55-
startActivity(Intent(Intent.ACTION_VIEW, uri))
56+
override fun onInterceptUrl(url: String): Boolean {
57+
return if (url.isNetworkUrl()) false else {
58+
startActivity(Intent(Intent.ACTION_VIEW, url.toUri()))
59+
true
60+
}
5661
}
5762

5863
override fun onReceivedTitle(title: String) {

0 commit comments

Comments
 (0)