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的链接应在新的浏览器窗口中打开。
有什么办法可以做到吗?
谢谢
第一,
然后在
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);