首页 > 解决方案 > 如何在 WebView 中捕获链接页面加载?

问题描述

我想在 Android 中加载网页时应用自定义 JS 代码WebView。我有一个WebView自定义的WebViewClient,覆盖onPageFinished()的,我在那里使用 JS 代码

 webView.loadUrl("javascript:(function() { ... });");

效果很好。但是,有些页面在单击链接时会“动态”加载页面(使用 AJAX?),并且onPageFinished()没有调用,因此没有应用我们的自定义 JS 代码。

此类页面的一个示例是https://reddit.com/r/Nature(您需要使用 Chrome 开发人员工具并设置移动视图),其中线程在单击时动态加载。

如何检测这些页面加载?

标签: javaandroidandroid-webview

解决方案


您必须覆盖该方法shouldOverrideUrlLoading

当即将在当前 WebView 中加载 URL 时,让主机应用程序有机会进行控制。如果未提供 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();
    }
};

推荐阅读