Android, How to get redirection event in WebView?

android, redirect, url, webview

Solution

The problem was because of certificate expiration. It is easily can be bypassed by adding following method in `webView.setWebViewClient(new WebViewClient() { });`

@Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
//              super.onReceivedSslError(view, handler, error);

                Log.e(TAG, "onReceivedSslError...");
                Log.e(TAG, "Error: " + error);
                handler.proceed();
            }

Also, in order to use this method you API level should be 8 or above.

Problem

I my application I have an activity which includes a web view. When I request to open a connection server redirects me but my web view never get it and shows page not found message. When i test URL in browser of my PC it directs me to next page. However, in webView I never directed to second page. My flow should be like this: 1- opening a URL 2- server directs to next URL 3- filling login form in that page by application 4- getting server response my code is like this: ``` public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_loginweb); Log.i(TAG, "Try to create activity..."); final String userId = PropertyManager.getUserId(); final String password = PropertyManager.getPassword(); Log.i(TAG, "Id: " + userId + ", Password: " + password); final WebView webView = (WebView) findViewById(R.id.webView); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webView.addJavascriptInterface(new JavaScriptInterface(this), "JsInterface"); webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { webView.loadUrl("javascript:document.LoginForm.tempusername.value = '" + userId + "';"); webView.loadUrl("javascript:document.LoginForm.password.value = '" + password + "';"); webView.loadUrl("javascript:document.LoginForm.Submit.click();"); webView.loadUrl("javascript:window.JsInterface.processHTML(document.getElementsByTagName('html')[0].innerHTML);"); String currentUrl = webView.getUrl(); Log.i(TAG, "current Url is: " + currentUrl); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { super.shouldOverrideUrlLoading(view, url); Log.i(TAG, "redirect to: " + url); view.loadUrl(url); return false; } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); Log.i(TAG, "error code is:" + errorCode); } }); webView.loadUrl(PropertyManager.getLoginPageURL()); } /* * To bind a new interface between our JavaScript and Android code, call addJavascriptInterface(), * passing it a class instance to bind to JavaScript of login page and an interface name that * JavaScript can call to access the class. */ public class JavaScriptInterface { Context mContext; /** Instantiate the interface and set the context */ JavaScriptInterface(Context c) { mContext = c; } /** process the html as needed by the app */ public void processHTML(String html) { Log.i(TAG, "Processing HTML..."); Log.i(TAG, "content of page: " + html); } /** Show a toast from the web page */ public void showToast(String toast) { Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); } } ``` My problem is `shouldOverrideUrlLoading()` method never calls during redirection. Any suggestion would be appreciated. Thanks.

Original source