¿Por qué WebView no puede abrir algunas URL locales (Android)?
Tengo un WebView
que estoy utilizando para abrir algunos archivos almacenados en el directorio assets/
de mi proyecto. Funciona bien para la mayoría de los archivos, pero hay uno en particular (y estoy seguro de que otros no he encontrado) que simplemente no se abrirá.
El archivo con el que tengo problemas se denomina:
- ¿Cómo se puede cargar https url sin el uso de ssl en android webview
- WebView en problemas con NestedScrollView
- Almacenamiento en caché en la vista web de Android
- Solicitud de URL de visualización web de Android con cadena de consulta
- Hacer AppBarLayout responder a desplazamiento en WebView
"assets/ContentRoot/Photos/XXX Software Logo - jpg - 75%.JPG"
Cuando lo paso a WebView
, y muestra la página de error, se muestra como:
"file:///android_asset/ContentRoot/Photos/XXX%20Software%20Logo%20-%20jpg%20-%2075%.JPG"
Entonces intenté funcionar con URLEncoder.encode()
en él y conseguí la página del error con la URL presentada como:
"file:///android_asset/ContentRoot/Photos/XXX+Software+Logo+-+jpg+-+75%.JPG"
Ninguna de estas URLs fueron capaces de abrir el archivo (y ambos se ven bien para mí). ¿Alguien tiene alguna idea?
ACTUALIZACIÓN: Si codifico el %
a mano (usando %25
, como se sugiere commonsware.com) entonces carga la imagen, pero intenta analizarla como texto, no como una imagen, así que solo obtengo un montón de (básicamente) basura.
Además, referirse a la imagen en un documento HTML con una URL relativa no funciona (probablemente porque no se está analizando como una imagen?):
<img src="../Photos/XXX%20Software%20Logo%20-%20jpg%20-%2075%.JPG" /> <img src="../Photos/XXX%20Software%20Logo%20-%20jpg%20-%2075%25.JPG" />
- Android WebView: deshabilitar el degradado del borde amarillo de desplazamiento
- Escalado de la vista de Android 4.1 (setInitialScale, meta-escala inicial no funciona)
- HTML localStorage es nulo en Android cuando se usa webview
- Teclado suave de Android no panorámico vista web
- ¿Cómo abrir la página HTML local en el navegador androide nativo (no en la vista web)?
- Autenticación Monodroid WebView para SSRS
- Android Crash Report - Native crash en /system/lib/libc.so causado por webview
- ¿Qué está causando esto en android webView?
Bueno, después de pasar demasiado tiempo en esto, he descubierto lo que está pasando. Básicamente, si las imágenes almacenadas en el directorio assets/
contienen un espacio (por ejemplo, "") en su nombre de archivo, no se procesarán como imágenes.
myWebView.loadUrl("file:///android_asset/testimage.jpg");
funciona bien. Sin embargo,
myWebView.loadUrl("file:///android_asset/test+image.jpg");
Sólo lanza un error no encontrado y
myWebView.loadUrl("file:///android_asset/test image.jpg"); // and myWebView.loadUrl("file:///android_asset/test%20image.jpg");
Mostrarlo incorrectamente visualizado (como texto … ver captura de pantalla en cuestión).
Este comportamiento inesperado está presente en (al menos) 1.5, 1.6 y 2.0 y presenté un informe de error .
Intente deshacerse del %
en el nombre de archivo. O escápela como %25
.
Supongo que WebView sólo entiende los tipos de contenido relacionados con el texto por lo que fielmente el tratamiento de su JPG como base64 de codificación, decodifica y muestra el resultado gobble-goop como texto. Realmente no sé si es posible establecer el tipo de contenido para WebView, pero como solución se puede intentar tirar img etiqueta dentro de la etiqueta html y carga página resulttet. También probablemente sólo puede usar WebView # loadDataWithBaseUrl