33

I build a WebView which displays a website. The website contains links without a target="_blank" attribute and some with it.

I need to open the links with target defined in the external standard device browser and the ones without it inside the WebView.

I'm using a WebViewClient and I tried around with this function but still all my links are opened within the WebView:

Alternative 1:

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

    return super.shouldOverrideUrlLoading(view, url);        
}

Alternative 2:

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

    view.loadUrl(url);
    return true;        
}

Does anybody know how I can open blank-links externally?

Thanks!

PS: To avoid missunderstandings: I can't use this approach because the only way I know the link should be opened externallly is the target attribute.

4

5 回答 5

67

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

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;
    }
});
于 2014-05-02T15:10:46.540 回答
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;
        }
    }
}
于 2015-03-13T21:38:16.063 回答
1

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

您还需要使用 WebChromeClient。您可以看到thisthis。您可以将 WebViewClient 设置为新的 WebView 并覆盖 shouldOverrideUrlLoading 方法,然后您可以获取 url 并在这里做任何您想做的事情。如果您不设置 WebViewClient,我认为它也应该可以工作。在我的情况下,我想获取 url,所以我将 WebViewClient 设置为新的 WebView。

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

于 2013-08-27T06:32:35.433 回答
0

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

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

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

于 2020-08-17T05:58:13.040 回答
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;
        }
    });
于 2019-09-24T05:08:26.873 回答