单击 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\">
这不是有效格式,这就是它显示空白页的原因。
从字符串中删除 \ 解决了我的问题。
我在 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\">
这不是有效格式,这就是它显示空白页的原因。
从字符串中删除 \ 解决了我的问题。