shouldOverrideUrlLoading does not seem to get called properly + appreciation post
First off, thanks so much for this project! π Saved me lots of time - wish I knew about this before ^^
During implementation of your library, I found a small problem (might as well be on my side)
When registering a WebViewClient() like this, I would normally expect the shouldOverrideUrlLoading function to be called.
wv?.webViewClient = object : WebViewClient() {
override fun onReceivedError(view: WebView?,request: WebResourceRequest?,error: WebResourceError?) {
//
}
override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
Log.d("LOGGER", "url-triggered")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
if (request != null) {
val u = request.url.toString()
if(u.contains("keyword")) {
// website should not load, custom handler
return true
}
}
}
}
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
}
return super.shouldOverrideUrlLoading(view, request)
}
Expected
- when loading a new url (calling
wv?.loadUrl()) theshouldOverrideUrlLoadingfunction should be called - as a result
-
url-triggeredshould be logged - the url should not be loaded, because of the
return true
-
Actual
- url gets loaded
-
shouldOverrideUrlLoadingis not called; noting is logged
Possibility to Avoid this / get the expected behaviour
I would not call this a clean approach, but it works π
- override
onPageStarted - check url
-
wv?.stopLoading() -
wv?.onBackPressed()
Thanks!
If you have added a restricted set of allowed hostnames, either via addPermittedHostname or via addPermittedHostnames, then that set is evaluated first. So if the hostname of your (next) URL is not in that list, the request is cancelled immediately, before your own handler is called.
Other than that, when you set up a custom WebViewClient, your own handler should be called as you expect.
But, Iβm afraid you might have to override the variant of shouldOverrideUrlLoading with String url as its second parameter (yes, although itβs deprecated), not the one with WebResourceRequest request. Can you try that?
(If this works, this aspect should really be fixed or documented. Sorry for that!)
Thanks for your response @ocram !
Indeed, overriding shouldOverrideUrlLoading(view: WebView?, url: String?) works.
Would be awesome if you could include this in the docs (or even had a fix π)
Thanks again for your good work π closing
Reopening until fixed.
Thanks again!