Home » Android » javascript – Android WebView canGoBack always true

javascript – Android WebView canGoBack always true

Posted by: admin June 15, 2020 Leave a comment

Questions:

I have a WebView that is loading social media pages. I have overridden the Back button to call the goBack method on the WebView until canGoBack() returns false. Then it calls super.onBackPressed(). The problem is that Twitter and YouTube use Javascript in such a way that canGoBack() returns true unless you tap the back button 4 times really quickly.

I’ve tried checking the original url with the current url, but the page has a different url than the one that gets passed in.

Does anyone know a way to have the back button call the WebView’s goBack method until you are at the beginning, then call super.onBackPressed?

How to&Answers:

Well, it’s not ideal but you may track the navigation history manually by using an array (or just an integer to be increased and decreased) and push the current url into it every time it changes and pop the last url from it when you press the back button, and if the array is empty (or the integer is 0) you call super.onBackPressed().
To execute code when the url changes, you can override the method boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request) of the
WebViewClient (link to the documentation).
This way the web pages’ javascript can’t interfere with how you handle the back button.