Android - 使用外部浏览器在WebView中打开目标_blank链接

Ron*_*Ron 24 android android-webview webviewclient

我建立一个WebView显示网站.该网站包含没有target="_blank"属性的链接和一些带有它的链接.

我需要打开target外部标准设备浏览器中定义的链接和WebView中没有它的链接.

我正在使用一个WebViewClient,我尝试了这个功能,但我的所有链接仍在以下内容中打开WebView:

备选方案1:

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {

    return super.shouldOverrideUrlLoading(view, url);        
}
Run Code Online (Sandbox Code Playgroud)

备选方案2:

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {

    view.loadUrl(url);
    return true;        
}
Run Code Online (Sandbox Code Playgroud)

有人知道如何在外部打开空白链接吗?

谢谢!

PS:为了避免误解:我不能使用这种方法,因为我知道链接的唯一方法应该是外部打开target属性.

Car*_* Ip 48

在访问上述链接后,我想出了这段代码,希望这会有所帮助.

wv.getSettings().setSupportMultipleWindows(true);
wv.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;
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 了解onCreateWindow何时触发很重要.请参阅[link](http://therockncoder.blogspot.in/2014/04/understanding-androids-webchromeclient.html)以更好地了解 (3认同)
  • 有时`data`为null (2认同)
  • 该解决方案几乎是完美的。除此之外,<a>元素中的图像在被点击时会在新窗口中打开,而<a>不会像预期的那样。 (2认同)

小智 5

我遇到了同样的问题。我想在应用程序中打开网站页面,其余所有页面都应在“默认浏览器”中打开。我使用了一种技术。如果URL包含我的网站名称,那么我将在WebView中打开它,并保留所有在“默认”浏览器中打开的网站。

查找以下代码,希望对所有遇到此类问题的人都有用。

private class MyBrowser extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.contains("/internetgeeks")) {
            browser.loadUrl(url);
            return false;
        } else {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            startActivity(intent);
            return true;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)