I am using a WebView within an activity. An ASP.NET page is being opened inside the WebView. I have implemented the back button to call the goBack method. When I open the page with the Samsung browser app or Chrome on the device, the back button works as expected. However, when goBack is called in the WebView, it doesn’t go to the previous page, but the scroll position on the screen changes. What could be the reason for this?
My webview settings:
<code>webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new WebAppInterface(getContext()), "JSInterface");
webView.setWebViewClient(new CustomWebViewClient());
webView.getSettings().setDomStorageEnabled(true);
webView.requestFocus(View.FOCUS_DOWN);
webView.setOnTouchListener((v, event) -> {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
if (!v.hasFocus()) {
v.requestFocus();
}
break;
default:
break;
}
return false;
});
</code>
<code>webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new WebAppInterface(getContext()), "JSInterface");
webView.setWebViewClient(new CustomWebViewClient());
webView.getSettings().setDomStorageEnabled(true);
webView.requestFocus(View.FOCUS_DOWN);
webView.setOnTouchListener((v, event) -> {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
if (!v.hasFocus()) {
v.requestFocus();
}
break;
default:
break;
}
return false;
});
</code>
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new WebAppInterface(getContext()), "JSInterface");
webView.setWebViewClient(new CustomWebViewClient());
webView.getSettings().setDomStorageEnabled(true);
webView.requestFocus(View.FOCUS_DOWN);
webView.setOnTouchListener((v, event) -> {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
if (!v.hasFocus()) {
v.requestFocus();
}
break;
default:
break;
}
return false;
});
Back button part:
<code>override fun onBackPressed() {
if (webview?.canGoBack() == true) {
webview?.goBack()
} else {
super.onBackPressed()
}
}
</code>
<code>override fun onBackPressed() {
if (webview?.canGoBack() == true) {
webview?.goBack()
} else {
super.onBackPressed()
}
}
</code>
override fun onBackPressed() {
if (webview?.canGoBack() == true) {
webview?.goBack()
} else {
super.onBackPressed()
}
}