211

我在我的WebView. 现在我需要的是,当用户单击加载页面上的链接时,它必须像普通浏览器一样工作并以相同的WebView. 但它正在打开默认浏览器并在那里加载页面?

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

4

6 回答 6

353

如果您使用的是 aWebView如果您不想要默认的 Android 行为,则必须自己拦截点击。

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

你设置WebViewClient你的WebView使用setWebViewClient()方法

如果您查看WebViewSDK中的示例,则会有一个示例可以满足您的需求。它很简单:

private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}
于 2010-03-04T12:03:51.193 回答
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);
    }           
}
于 2010-04-22T14:53:31.850 回答
26

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

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

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

myWebView.setWebViewClient(new WebViewClient());
于 2013-09-20T16:51:20.797 回答
17

在您的代码中添加这 2 行 -

mWebView.setWebChromeClient(new WebChromeClient()); 
mWebView.setWebViewClient(new WebViewClient());
于 2014-10-03T09:39:12.933 回答
9

该方法boolean shouldOverrideUrlLoading(WebView view, String url)在 API 24 中已弃用。如果您支持新设备,则应使用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;
        }
    });
}
于 2016-06-22T19:07:18.723 回答
8
于 2015-06-15T10:45:51.270 回答