关于html:Android WebView链接到具有target = _blank的同一窗口以打开新窗口

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

我有一个混合应用程序,该应用程序使用WebView从我自己的网站呈现外部html。 问题是,如果单击任何链接,则会启动浏览器窗口。 我发现以下代码可以帮助我,并且可以正常工作:

1
2
3
4
5
6
7
    myWebView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return false;
        }
    });

但是现在的问题是,我希望它对其中具有target = _blank的链接不起作用。 因此,任何常规链接仍将在WebView内打开,而target = _blank的链接应在新的浏览器窗口中打开。

有什么办法可以做到吗?

谢谢


第一,

mWebView.getSettings().setSupportMultipleWindows(true);

然后在WebChromeClient中覆盖OnCreateWindow()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    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;
    }


尝试这个。

1
2
3
4
5
6
7
8
9
10
11
12
13
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;
    }
});

参考:叶Car文


除了myWebView.getSettings()。setSupportMultipleWindows(true);之外,Webview还需要其他一项设置。
myWebView.setJavaScriptCanOpenWindowsAutomatically(true);