【问题标题】:Is it possible to freeze the android webview?是否可以冻结android webview?
【发布时间】:2020-06-16 04:22:09
【问题描述】:

我的应用程序需要功能,有一个按钮调用“冻结”,当它点击时我想冻结 web 视图。冻结 webview 的意思是在它冻结后 webview 不应该导航到任何其他页面,例如,如果用户单击链接或提交表单,它不应该做任何事情。

我尝试使用WebViewClient 方法shouldOverrideUrlLoadingshouldInterceptRequest 阻止请求。但它不起作用,我还有其他方法可以实现吗?

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
    }
}

【问题讨论】:

  • 不幸的是我不能这样做,我需要捕获点击的元素。如果用户点击了一个链接,我想使用 JavaScript 界面捕获该事件。
  • 你可以尝试从shouldOverrideUrlLoading返回消费,即真实。看看This thread
  • 是的,我这样做了,它适用于链接和表单,但不适用于 javascript 页面加载。例如,当我单击视频时单击冻结按钮后,youtube 会切换到该页面,这意味着它正在加载视频。
  • 谢谢,在那个链接中,我找到了适合我的解决方案的 JavaScript 版本。我将其发布为这个问题的答案。

标签: android android-webview


【解决方案1】:

当我在 shouldOverrideUrlLoading 上返回 true 时 ADM 评论解决了链接和表单提交问题,但没有像 YouTube 中那样加载 JavaScript 页面。所以要解决这个问题,我需要执行一个小的 sn-p 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
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 2015-10-09
    • 1970-01-01
    相关资源
    最近更新 更多