【问题标题】:Android - Open target _blank links in WebView with external browserAndroid - 使用外部浏览器在 WebView 中打开目标 _blank 链接
【发布时间】:2013-08-13 19:22:29
【问题描述】:

我建立了一个 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,因为我知道应该在外部打开链接的唯一方法是target 属性。

【问题讨论】:

  • 当url包含属性target="_blank"你得到答案了吗??

标签: android android-webview webviewclient


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

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

【讨论】:

  • Carson-ip 的答案更好:它会按要求处理 target="_blank"
  • 只是为了补充答案,startActivity 对我不可用,我打电话给intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 并通过view.Context.ApplicationContext.StartActivity(intent); 调用活动
【解决方案3】:

我也遇到了同样的问题,现在我找到了解决办法。

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

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

【讨论】:

    【解决方案4】:
    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;
            }
        });
    

    【讨论】:

      【解决方案5】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-07-21
        • 2021-06-12
        • 2015-12-09
        • 2014-07-12
        • 2018-02-11
        • 2017-08-06
        • 1970-01-01
        • 2012-09-24
        相关资源
        最近更新 更多