【发布时间】:2022-01-20 06:46:56
【问题描述】:
我在 jetpack compose 项目中使用WebView。该项目是关于服务器驱动的 UI,其中一个组件将 String 作为 HTML 返回。里面的 HTML 包含<a href> 标签,点击它应该在默认浏览器上打开 URL 或打开。
为了处理该事件,我重写了函数shouldOverrideUrlLoading。问题是当我单击该标签时,它会在WebView 内打开一个空白页面。我在里面捕获了WebResourceRequest.url 属性,它返回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)
【问题讨论】:
-
也许你禁用了javascript。使用
webView.setJavascriptEnabled(true)启用 webView 的 javascript -
@SagarBalyan 感谢您的回答。已经试过了,还是不行
-
这能回答你的问题吗? WebView link click open default browser
标签: android webview android-jetpack-compose