Android WebView 链接到带有 target=_blank 的同一窗口以打开新窗口

新手上路,请多包涵

我有一个混合应用程序,它使用 WebView 从我自己的网站呈现外部 html。它有一个问题,如果单击任何链接,它会启动一个浏览器窗口。我发现这段代码可以帮助我,而且它有效:

     myWebView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return false;
        }
    });

但现在的问题是我希望它不适用于其中包含 target=_blank 的链接。所以任何正常的链接仍然在 WebView 中打开,而带有 target=_blank 的链接应该在新的浏览器窗口中打开。

我们有什么办法可以做到这一点?

谢谢

原文由 mim 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

第一的,

mWebView.getSettings().setSupportMultipleWindows(true);

然后在 WebChromeClient 中,覆盖 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;
    }

原文由 Darpan 发布,翻译遵循 CC BY-SA 3.0 许可协议

试试这个。

 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;
    }
});

参考资料: Carson Ip

原文由 Aashish Kumar 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题