Java 如何在WebView中捕获链接页面加载?

Java 如何在WebView中捕获链接页面加载?,java,android,android-webview,Java,Android,Android Webview,我想在Android的WebView中加载网页时应用自定义JS代码。我有一个带有自定义WebView客户端的WebView,覆盖了onPageFinished(),我使用 webView.loadUrl("javascript:(function() { ... });"); 这很有效。但是,有些页面在单击链接时会“动态”(使用AJAX?)加载页面,并且不会调用onPageFinished(),因此不会应用我们的自定义JS代码 此类页面的一个示例是(您需要使用Chrome developer

我想在Android的
WebView
中加载网页时应用自定义JS代码。我有一个带有自定义
WebView客户端的
WebView
,覆盖了
onPageFinished()
,我使用

 webView.loadUrl("javascript:(function() { ... });");
这很有效。但是,有些页面在单击链接时会“动态”(使用AJAX?)加载页面,并且不会调用
onPageFinished()
,因此不会应用我们的自定义JS代码

此类页面的一个示例是(您需要使用Chrome developer工具并设置移动视图),其中线程在单击时动态加载


如何检测这些页面加载

您必须重写该方法

当URL即将加载到当前WebView中时,让宿主应用程序有机会控制它。如果未提供WebViewClient,默认情况下WebView将要求Activity Manager为URL选择适当的处理程序。如果提供了WebViewClient,则返回true将导致当前WebView中止加载URL,而返回false将导致WebView像往常一样继续加载URL

如果希望
WebView
在旧版和新版本的Android上工作,则应该覆盖两次,如下所示:

WebViewClient webViewClient = new WebViewClient()
{
    @SuppressWarnings("deprecation") @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    {
        view.loadUrl(url);
        return true;
    }

    @TargetApi(Build.VERSION_CODES.N) @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
    {
        view.loadUrl(request.getUrl().toString());
        return true;
    }

    @Override
    public void onPageFinished(WebView view, String url)
    {
        super.onPageFinished(view, url);
        Toast.makeText(getApplicationContext(), "Page loaded!", Toast.LENGTH_SHORT).show();
    }
};

我真的很感谢你的帮助!遗憾的是,
onPageFinished()。但是当我点击某个线程,打开新页面时,这个函数就不再被调用了。Reddit页面上正在发生一些特定的事情,因为在其他网站上,当我单击常规
a href
链接时,加载新页面时会调用
onPageFinished()
。但不是在Reddit上:(@PrimožKralj,你必须重写方法
shouldOverrideUrlLoading
,就像我的例子一样。这个方法特别适用于像你这样的情况。你做到了吗?只有在这种情况下,方法
onPageFinished()
将在单击链接后加载新页面时被调用。是的,我已经覆盖了它两次,与您的示例相同。@PrimožKralj,您写道:Reddit页面上发生了一些特定的事情,因为在其他网站上,当我单击常规
a href
链接时,
onPageFinished()加载新页面时调用
。这是否意味着在其他网站上它现在可以工作(在方法
应该覆盖
覆盖之后),并且没有从
覆盖shouldOverrideUrlLoading
它在其他网站上不起作用?您是否在其他网站上检查过它,有没有从
覆盖shouldOverrideUrlLoading
?在其他网站上它以前没有覆盖
shouldOverrideUrlLoading()
。在覆盖它们之后,这些站点没有任何变化(它可以使用或不使用)。但有问题的页面是Reddit。我无法以任何方式解决这个问题:(