Как зафиксировать загрузку страницы ссылки в WebView? - PullRequest
0 голосов
/ 01 декабря 2018

Я хочу применить пользовательский код JS, когда веб-страница загружается в Android WebView.У меня есть WebView с пользовательским WebViewClient, переопределяющим onPageFinished(), и я применяю код JS там, используя

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

, который прекрасно работает.Однако есть некоторые страницы, где при нажатии на ссылку страница загружается «динамически» (с использованием AJAX?) И onPageFinished() не вызывается, поэтому наш пользовательский код JS не применяется.

Примертакая страница - https://reddit.com/r/Nature (вам нужно использовать инструменты разработчика Chrome и настроить мобильное представление), где потоки загружаются динамически при нажатии на них.

Как я могу обнаружить эти загрузки страницы?

1 Ответ

0 голосов
/ 04 декабря 2018

Необходимо переопределить метод shouldOverrideUrlLoading:

Дать хост-приложению возможность получить контроль над 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();
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...