单击URL将打开默认浏览器

时间:2010-03-04 11:22:16

标签: android url android-webview android-websettings

我已在WebView中加载了外部网址。现在我需要的是,当用户点击加载页面上的链接时,它必须像普通浏览器一样工作,并在同一WebView中打开链接。但它打开默认浏览器并在那里加载页面?

我启用了JavaScript。但它仍然无法正常工作。我忘记了什么吗?

6 个答案:

答案 0 :(得分:346)

如果您使用WebView,则必须自行截取点击次数,如果您不想使用默认的Android行为。

您可以使用WebViewClient监控WebView中的事件。您想要的方法是shouldOverrideUrlLoading()。这允许您在选择特定URL时执行自己的操作。

您使用setWebViewClient() method设置WebViewClient的{​​{1}}。

如果你看一下WebView sample in the SDK,就会有一个例子可以满足你的需求。它很简单:

WebView

答案 1 :(得分:54)

在某些情况下,如果获得不会触发url加载方法的重定向,则可能需要覆盖onLoadResource。在这种情况下,我尝试了以下内容:

@Override
public void onLoadResource(WebView view, String url)
{
    if (url.equals("http://redirectexample.com"))
    {
        //do your own thing here
    }
    else
    {
        super.onLoadResource(view, url);
    }           
}

答案 2 :(得分:25)

官方documentation说,单击WebView中的链接将启动处理URL的应用程序。您需要覆盖此默认行为

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

或者如果方法中没有条件逻辑,只需执行此操作

myWebView.setWebViewClient(new WebViewClient());

答案 3 :(得分:13)

在代码中添加这2行 -

mWebView.setWebChromeClient(new WebChromeClient()); 
mWebView.setWebViewClient(new WebViewClient());

答案 4 :(得分:8)

API 24中已弃用方法boolean shouldOverrideUrlLoading(WebView view, String url)。如果您支持新设备,则应使用boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request)

您可以通过执行以下操作来使用它们:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    newsItem.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(request.getUrl().toString());
            return true;
        }
    });
} else {
    newsItem.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    });
}

答案 5 :(得分:6)

Arulx Z的答案正是我所寻找的。

我正在使用带有recyclerview和webviews的Navigation Drawer编写一个应用程序,用于在应用程序内部保持Web浏览,而不管单击的超链接(因此不启动外部Web浏览器)。为此,只需输入以下两行代码即可:

select t1.name from table1 t1 left join table2 t2 on t1.name = t2.name where t2.name is null;

完全在您的WebView语句下。

以下是我实现的WebView代码的示例:

mWebView.setWebChromeClient(new WebChromeClient()); 
mWebView.setWebViewClient(new WebViewClient());
这样,网站中点击的每个链接都会加载到您的WebView中。 (使用Android Studio 1.2.2并更新所有SDK)