Android WebView links to same window with target=_blank to open new window

前端 未结 3 818
天涯浪人
天涯浪人 2020-12-28 21:03

I have a hybrid app that uses WebView to render external html from my own site. It had a problem that if any link was clicked, it started a browser window. I found this code

相关标签:
3条回答
  • 2020-12-28 21:21

    One more setting required for webview in addition to myWebView.getSettings().setSupportMultipleWindows(true); myWebView.setJavaScriptCanOpenWindowsAutomatically(true);

    0 讨论(0)
  • 2020-12-28 21:27

    First,

    mWebView.getSettings().setSupportMultipleWindows(true);

    Then in WebChromeClient, override OnCreateWindow()

        private class MyWebChromeclient extends WebChromeClient {
    
    
        @Override
        public boolean onCreateWindow(WebView view, boolean isDialog,
                boolean isUserGesture, Message resultMsg) {
    
                WebView newWebView = new WebView(WebViewActivity2.this);
                view.addView(newWebView);
                WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
                transport.setWebView(newWebView);
                resultMsg.sendToTarget();
    
                newWebView.setWebViewClient(new WebViewClient() {
                    @Override
                    public boolean shouldOverrideUrlLoading(WebView view, String url) {
                        Intent browserIntent = new Intent(Intent.ACTION_VIEW);
                        browserIntent.setData(Uri.parse(url));
                        startActivity(browserIntent);
                        return true;
                    }
                });
            return true;
        }
    
    0 讨论(0)
  • 2020-12-28 21:30

    Try this.

    myWebView.getSettings().setSupportMultipleWindows(true);
    myWebView.setWebChromeClient(new WebChromeClient() {
        @Override
        public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, android.os.Message resultMsg)
        {
            WebView.HitTestResult result = view.getHitTestResult();
            String data = result.getExtra();
            Context context = view.getContext();
            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(data));
            context.startActivity(browserIntent);
            return false;
        }
    });
    

    Reference: Carson Ip

    0 讨论(0)
提交回复
热议问题