#android #android-webview
#Android #android-webview
Вопрос:
У меня есть ссылка на файл PDF или XML. По умолчанию веб-просмотр не отображает такие ссылки. Из другого сообщения StackOverflow я понял, что мне нужно перенести по ссылке с помощью Google doc или Google drive link (http://docs.google.com/viewer?url=myPDFLink ). Это работает, веб-просмотр отображает содержимое, но не во всех случаях. Для одной и той же ссылки содержимое случайным образом может не отображаться или отображаться. Если страница не отображается, я могу просто повторить попытку несколько раз, и содержимое отобразится. Не могу найти причину такого поведения. Даже если веб-представление пустое, вызывается обратный вызов onPageFinished, но не какие-либо обратные вызовы с ошибками.
- Обновление: onPageStarted не вызывается, но выполняется onPageFinished
WebViewClient Веб-просмотрщик:
val webViewClient = object : WebViewClient() {
override fun onPageStarted(view: WebView, url: String, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
updateOnBackPressedCallbackState()
toolbarActivity?.setToolBarTitle(url)
onPageStateListener?.onPageStarted(view, url)
}
override fun onPageFinished(view: WebView, url: String) {
super.onPageFinished(view, url)
progressBar?.visibility = View.GONE
toolbarActivity?.setToolBarTitle(view.title)
onPageStateListener?.onPageFinished(view)
}
override fun onReceivedError(
view: WebView?,
errorCode: Int,
description: String?,
failingUrl: String?
) {
super.onReceivedError(view, errorCode, description, failingUrl)
}
override fun onReceivedError(
view: WebView?,
request: WebResourceRequest?,
error: WebResourceError?
) {
super.onReceivedError(view, request, error)
}
override fun onReceivedHttpError(
view: WebView?,
request: WebResourceRequest?,
errorResponse: WebResourceResponse?
) {
super.onReceivedHttpError(view, request, errorResponse)
}
override fun onReceivedSslError(
view: WebView?,
handler: SslErrorHandler?,
error: SslError?
) {
super.onReceivedSslError(view, handler, error)
}
}
Настройки:
webViewer.webViewClient = webViewClient
webViewer.settings.javaScriptEnabled = true
webViewer.isHorizontalScrollBarEnabled = true
webViewer.settings.mixedContentMode = WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE
Ответ №1:
Попробуйте обработать ошибки SSL внутри onReceivedSslError
, чтобы продолжить работу с сертификатом
override fun onReceivedSslError(
view: WebView?,
handler: SslErrorHandler?,
error: SslError?
) =
if (handler != null) {
handler.proceed()
} else {
super.onReceivedSslError(view, handler, error)
}
Комментарии:
1. Я пытался. В моем случае этот обратный вызов никогда не вызывался