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

Android-使用外部浏览器在WebView中打开目标链接,android,android-webview,webviewclient,Android,Android Webview,Webviewclient,我构建了一个显示网站的WebView。该网站包含的链接没有target=“\u blank”属性,有些链接带有该属性 我需要打开外部标准设备浏览器中定义的带有target的链接,以及WebView中没有它的链接 我使用的是WebView客户端,我尝试了使用此功能,但仍然在WebView中打开了我的所有链接: 备选案文1: @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { retur

我构建了一个显示网站的
WebView
。该网站包含的链接没有
target=“\u blank”
属性,有些链接带有该属性

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

我使用的是
WebView客户端
,我尝试了使用此功能,但仍然在
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:为了避免误解:我不能使用,因为我知道链接应该从外部打开的唯一方法是
target
属性。

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

您还需要使用WebChromeClient。您可以查看和。 您可以将WebViewClient设置为新的WebView并重写shouldOverrideUrlLoading方法,然后您可以获取url并在此处执行任何您想要的操作。如果不设置WebViewClient,我认为它也应该工作。在我的例子中,我想获取url,因此我将WebViewClient设置为新的WebView


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

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

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

我也面临同样的问题。我想在应用程序中打开我的网站页面,其余所有页面都应该在默认浏览器中打开。我用了一种技巧。若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;
        }
    }
}
如果在第二个窗口中单击链接时打开新窗口,则它将由另一个浏览器打开

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

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

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


例如,

Carson ip的答案更好:它按要求天生处理
target=“\u blank”
。为了补充答案,startActivity对我来说不可用,我调用了
intent.addFlags(intent.FLAG\u ACTIVITY\u NEW\u TASK)
并通过
view.Context.ApplicationContext.StartActivity(intent)调用活动了解onCreateWindow何时触发非常重要。请参阅以更好地理解常规webviewclient是否有办法做到这一点?有时
数据
为空此解决方案近乎完美。除此之外,当点击图像时,元素中的图像将在新窗口中打开,而不会像预期的那样打开。文档说“如果宿主应用程序将创建新窗口,则此方法应返回true”。当url包含属性target=“\u blank”?时,您是否得到了答案??
 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;
        }
    });