У меня есть простой Android-клиент для моего сайта, основанный на WebView.Моя цель - показать или, по крайней мере, загрузить файлы PDF, расположенные на странице.Проблема в том, что эти PDF-файлы встроены (внутри тега embed), а WebView их не отображает.Пример внедренного PDF:
<embed class="my-class" type="application/pdf" src="data:application/pdf;base64,[base64string]">
, где [base64string]
- представление PDF-файла в формате base64.
Однако браузер Chrome (здесь и далее версия для Android) понимает встроенные PDF-файлы и предлагает их открыть.Насколько я знаю, Chrome и WebView имеют общую кодовую базу, поэтому я думаю, что в моем приложении можно добиться одинакового поведения.
Чтобы убедиться, что у Webview есть проблема с встраиванием PDF, необходимодостаточно, чтобы открыть любой сайт, содержащий такой контент, , например .Скорее всего, вместо PDF-файла вы увидите просто белую пустую рамку с (возможно, без) текстом, например Can't load plugin
.Если вы нажмете на этот кадр, ничего не произойдет.Насколько я понимаю, WebView просто не знает, как работать с такими объектами.
Пример экрана Chrome
Пример экрана WebView
Вот вещи, которые я уже сделал, и они не сработали:
Я пытался работать с различными настройками WebView:
webV.settings.javaScriptEnabled = true
webV.settings.allowFileAccess = true
webV.settings.pluginState = WebSettings.PluginState.ON
webV.settings.domStorageEnabled = true
webV.settings.setAppCacheEnabled (true)
webV.settings.javaScriptCanOpenWindowsAutomatically = true
webV.settings.mediaPlaybackRequiresUserGesture = true
webV.setLayerType (View.LAYER_TYPE_HARDWARE, null)
Я пытался перехватить загрузку встроенного файла методами WebChromeClient и WebViewClient, но безуспешно.Ресурс встраивания не загружается, поэтому нет событий.И ошибки тоже.
Я пробовал Chrome Custom Tabs, они понимают встроенный PDF, но, к сожалению, они не подходят для использования в моем проекте.
Есть ли возможность достичь понимания встроенных файлов PDF с помощью WebView?