WebView - open target=_blank links as target=_self

Viewed 485

My application loads site using webview. Some links have target _blank and opening in new window

public class EkChromeViewClient extends android.webkit.WebChromeClient {
    @Override
    public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
        Log.d("!!!new window!!!", "yes");

        WebView newWebView = new WebView(view.getContext());
        newWebView.getSettings().setPluginState(WebSettings.PluginState.ON);
        newWebView.getSettings().setDomStorageEnabled(true);
        newWebView.getSettings().setSupportMultipleWindows(true);
        newWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);

        newWebView.setWebViewClient(new EkWebViewClient());

        view.addView(newWebView);
        WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
        transport.setWebView(newWebView);
        resultMsg.sendToTarget();

        return true;
    }

    @Override
    public void onCloseWindow(WebView window) {
        Log.d("!!!close window!!!", "yes");
        super.onCloseWindow(window);
    }
}

But I need to open all urls only in one window ignoring target=_blank

1 Answers

You need to do something like this.

webView.setWebChromeClient(new WebChromeClient() {
@Override
        public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
            Uri parsedUri = Uri.parse(view.getUrl());
            WebView newWebView = new WebView(view.getContext());
            view.addView(newWebView);
            WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
            transport.setWebView(newWebView);
            resultMsg.sendToTarget();
            PackageManager packageManager = getPackageManager();
            Intent browseIntent = new Intent(Intent.ACTION_VIEW).setData(parsedUri);
            if (browseIntent.resolveActivity(packageManager) != null) {
                startActivity(browseIntent);
                return true;
            }
            return true;
        }
    });
Related