delight-im / delight-im/Android-AdvancedWebView

shouldOverrideUrlLoading does not seem to get called properly + appreciation post

Open
#279 4 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
2.4k
Forks
578
PR merge metrics
No merged PRs in 30d

Description

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()`) the `shouldOverrideUrlLoading` function should be called
- as a result
- `url-triggered` should be logged
- the url should not be loaded, because of the `return true`

## Actual
- url gets loaded
- `shouldOverrideUrlLoading` is 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()`

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.