单击 WebView 内的 href 标签会打开空白页面

Clicking on href tag inside WebView opens blank page

我在 Jetpack Compose 项目中使用 WebView。该项目是关于服务器驱动的 UI,其中组件 returns 字符串之一为 HTML。 HTML 里面包含 <a href> 标签,点击它应该在默认浏览器上打开 URL 或打开。

为了处理该事件,我覆盖了函数 shouldOverrideUrlLoading。问题是当我点击那个标签时,它会在 WebView 中打开一个空白页面。我捕获了里面的 WebResourceRequest.url 属性 和它 returns about:blank#blocked。我尝试在 WebView 中使用 WebSettings 玩一点,但没有帮助。还尝试捕获可能存在 ssl 证书问题的错误,但也没有找到任何解决方案。

代码如下:

AndroidView(factory = {
            WebView(context).apply {
                with(this.settings){
                    this.allowContentAccess = true
                }
                webViewClient = object : WebViewClient() {
                    override fun shouldOverrideUrlLoading(
                        view: WebView?,
                        request: WebResourceRequest?
                    ): Boolean {
                        Log.d("url0", request?.url.toString()) //returns about:blank#blocked
                        return if (url != null && (url!!.startsWith("http://") || url!!.startsWith("https://"))) {
                            //open page in browser
                            true
                        } else if (url != null && (url!!.startsWith("mailto:"))) {
                            //handle email
                            true
                        } else {
                            false
                        }
                    }
loadDataWithBaseURL(null, "<a href=\\"https://en.wikipedia.org/wiki/Log4j\\">This is sample data</a>.", "text/html", "UTF-8", null)

过了一会儿,我发现问题出在 <a href> 标记中,我从我的端点得到的响应是:

<a href=\\"https://en.wikipedia.org/wiki/Log4j\\">

如果您从字符串中删除转义标记,您会得到:

<a href=\"https://en.wikipedia.org/wiki/Log4j\">

这不是有效格式,这就是它显示空白页的原因。

从字符串中删除 \ 解决了我的问题。