【问题标题】:Android Webview, make urls open in different browserAndroid Webview,使网址在不同的浏览器中打开
【发布时间】:2011-12-15 18:16:51
【问题描述】:

当我点击我的应用程序中的链接时,它们会在同一个网页视图中打开。我希望它们在外部浏览器中打开。

我这样做了:

myWebView.setWebViewClient(new WebViewClient()
{
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    return false;
                }

});

返回 false 使其在同一个 webview 中加载,返回 "true" 则在单击链接时不会发生任何事情。

我查看了其他问题,但似乎其他所有人都有完全相反的问题。 (他们想要在他们的应用中加载链接)

我做错了什么?

【问题讨论】:

  • 链接是真正的链接(url)还是javascript sn-p?

标签: android webview


【解决方案1】:

在你的WebViewClient

@Override
public boolean shouldOverrideUrlLoading(final WebView view, final String url){
    if (loadUrlExternally){
        Uri uri = Uri.parse(url);
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);
        return true; //the webview will not load the URL
    } else {
        return false; //the webview will handle it
    }
}

这样它会像任何其他应用一样打开一个新的浏览器窗口。

【讨论】:

  • 这行得通,还必须将返回设置为“True”,否则它将在 webview 和浏览器中重复加载。
【解决方案2】:

这里有一个更完整的答案。注意:我是从片段调用的,因此在 startActivity() 之前是 getActivity()

    @Override
    public boolean shouldOverrideUrlLoading(final WebView view, final String url)
    {
        //check if the url matched the url loaded via webview.loadUrl()
        if (checkMatchedLoadedURL(url))
        {
            return false;
        } else
        {
            getActivity().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
            return true;
        }

/**
     * used to check if the loaded url matches the base url loaded by the fragment(mUrl)
     * @param loadedUrl
     * @return true if matches | false if doesn't or either url is null
     */
    private boolean checkMatchedLoadedURL(String loadedUrl)
    {
        if (loadedUrl != null && mUrl != null)
        {
            // remove the tailing space if exisits
            int length = loadedUrl.length();
            --length;
            char buff = loadedUrl.charAt(length);
            if (buff == '/')
            {
                loadedUrl = loadedUrl.substring(0, length);
            }

            // load the url in browser if not the OTHER_APPS_URL
            return mUrl.equalsIgnoreCase(loadedUrl);
        }
        return false;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-22
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 2012-09-29
    • 2014-03-12
    • 2014-10-23
    相关资源
    最近更新 更多