Можно ли заморозить просмотр android? - PullRequest
0 голосов
/ 16 июня 2020

Мне нужна функция в моем приложении, есть кнопка "заморозить", и когда она нажата, я хочу заморозить просмотр в Интернете. Под замораживанием веб-просмотра подразумевается, что после его остановки веб-просмотр не должен переходить на любую другую страницу, например, если пользователь щелкнул ссылку или отправил форму, он ничего не должен делать.

Я пробовал для блокировки запросов с помощью методов WebViewClient, shouldOverrideUrlLoading и shouldInterceptRequest. Но это не работает, есть ли другой способ добиться этого?

webView.webViewClient = object : WebViewClient() {
    override fun shouldOverrideUrlLoading(
        view: WebView?,
        request: WebResourceRequest?
    ): Boolean {

        if (!isFroze) {
            return super.shouldOverrideUrlLoading(view, request)
        }
        return false
    }

    override fun shouldInterceptRequest(
        view: WebView?,
        request: WebResourceRequest?
    ): WebResourceResponse? {
        if (!isFroze) {
            return super.shouldInterceptRequest(view, request)
        }
        return null
    }
}

1 Ответ

1 голос
/ 16 июня 2020

Как прокомментировал ADM, когда я возвращаю true на shouldOverrideUrlLoading, решил ссылку и отправку формы, но не загрузку страницы JavaScript, как на YouTube. Итак, чтобы решить эту проблему, мне нужно выполнить небольшой фрагмент JavaScript, который равен stopPropagation

webView.webViewClient = object : WebViewClient() {
    override fun onPageFinished(view: WebView?, url: String?) {
        view?.evaluateJavascript("""
            (function () {
                document.addEventListener('click', function (e) {
                    e.stopPropagation();
                }, true);
            })()
        """.trimIndent()) {}
        super.onPageFinished(view, url)
    }

    override fun shouldOverrideUrlLoading(
        view: WebView?,
        request: WebResourceRequest?
    ): Boolean {

        if (!isFreeze) {
            return super.shouldOverrideUrlLoading(view, request)
        }
        return true
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...