如何捕获WebView中的链接页面负载?

时间:2018-12-01 13:03:28

标签: java android android-webview

我想在Android var layout = { menu: { type: 0, x: 50, y: 50, w: 50, h: 50 }, name: { type: 2, str: "name", get x() { return 50+layout.menu.x }, get y() { return 40+layout.menu.y }, h: 25 } }; // Demo console.log(layout.name.x); 中加载网页时应用自定义JS代码。我有一个带有自定义layout.name.x的{​​{1}},覆盖了WebView,我使用

在其中应用了JS代码
WebView

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

此类页面的示例为https://reddit.com/r/Nature(您需要使用Chrome开发人员工具并设置移动视图),点击该线程即可动态加载线程。

如何检测这些页面加载?

1 个答案:

答案 0 :(得分:1)

您必须覆盖方法 shouldOverrideUrlLoading

  

当即将在当前WebView中加载URL时,使主机应用程序有机会进行控制。如果未提供WebViewClient,则默认情况下,WebView将要求活动管理器为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();
    }
};