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

我已经启用JavaScript。但还是不行。我忘记什么了吗?


当前回答

官方文档说,点击WebView中的链接将启动处理url的应用程序。您需要重写此默认行为

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

或者如果方法中没有条件逻辑,则简单地这样做

myWebView.setWebViewClient(new WebViewClient());

其他回答

在代码中添加这两行-

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

官方文档说,点击WebView中的链接将启动处理url的应用程序。您需要重写此默认行为

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

或者如果方法中没有条件逻辑,则简单地这样做

myWebView.setWebViewClient(new WebViewClient());

方法布尔shouldOverrideUrlLoading(WebView view, String url)在API 24中被弃用。如果你支持新设备,你应该使用布尔shouldOverrideUrlLoading (WebView视图,WebResourceRequest请求)。

你可以这样使用它们:

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

如果你使用WebView,你必须自己拦截点击,如果你不想要默认的Android行为。

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

您可以使用setWebViewClient()方法设置WebView的WebViewClient。

如果你看一下SDK中的WebView示例,有一个例子就是你想要的。其实很简单:

private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

在某些情况下,你可能需要一个onLoadResource覆盖,如果你得到一个重定向,不触发url加载方法。在这种情况下,我尝试了以下方法:

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