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

时间:2013-08-12 13:02:55

标签: 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);        
}

备选方案2:

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

    view.loadUrl(url);
    return true;        
}

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

谢谢!

PS:为了避免误解:我不能使用this approach,因为我知道链接的唯一方式应该是外部打开{/ 1}}属性。

5 个答案:

答案 0 :(得分:44)

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

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

答案 1 :(得分:3)

我遇到了同样的问题。我想在应用程序内打开我的网站页面,其余所有页面都应该在默认浏览器中打开。我用了一种技术。如果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;
        }
    }
}

答案 2 :(得分:1)

我也有同样的问题,现在我找到了解决方案。

您还需要使用WebChromeClient。您可以看到thisthis。 您可以将WebViewClient设置为新的WebView并覆盖shouldOverrideUrlLoading方法,然后您可以获取URL并在此处执行任何操作。如果您没有设置WebViewClient,我认为它也应该有用。在我的情况下,我想获取URL,因此我将WebViewClient设置为新的WebView。

顺便说一句,如果您删除旧的webview,那么当您从浏览器返回时,webview将为空白。所以我保留了webview并添加了一个新的,但将可见性设置为“已消失”。

答案 3 :(得分:0)

private  WebView WEB_v;

如果您在任何第二个窗口中单击链接时都打开新窗口,那么它将由另一个浏览器打开

 WEB_v.getSettings().setSupportMultipleWindows(true);
    WEB_v.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;
        }
    });

答案 4 :(得分:0)

如果您只想使用Javascript做此事,那么这是我的解决方案,用于打开从android或ios应用程序的webview到外部浏览器的任何链接。

使用查询参数中的“ open = outside”修改了您的URL。

即。 https://example.com/homePage?open=outside