Cómo pasar un objeto Blob de javascript a Android?
Tengo un objeto Blob dentro de mi WebView, ¿cómo puedo pasarlo a Android?
Quiero guardarlo en un archivo local en el dispositivo.
He estado tratando de usar:
- Android PhoneGap con controles nativos
- Android: guarda el nombre de usuario y la contraseña de WebView (como Google Chrome)
- ¿Cómo detengo Flash después de dejar un WebView?
- Android: Usar html5 para determinar la geolocalización en webview con javascript api
- ERROR / Web Console: Uncaught TypeError: No se puede llamar al método 'getItem' de null en http://m.youtube.com/:844
var url = webkitURL.createObjectURL(myBlob);
Pero no he podido descargarlo al dispositivo.
- ¿Es posible obtener datos de formularios HTML en android mientras se usa webView?
- La vista web de Android se aplica demasiado lentamente.
- ¿Cómo mantengo mi aplicación Córdova a pantalla completa al abrir el teclado de Android?
- Depuración de una WebView de Android desde el PC mediante adb
- Android 4.0.1 rompe el almacenamiento local HTML 5 de WebView?
- ¿Por qué el atributo minHeight no funciona en WebView Android?
- Cómo detener ScrollView desde el desplazamiento hasta la parte inferior de la página cargada actual en WebView
- El controlador onScaleChanged de WebView se llama varias veces
No he probado esto, pero pude encontrar alguna información que apunta al uso de Javascript Interfaces con WebViews. Básicamente, puede asignar clases Java para trabajar como clases Javascript en su WebView (e intercambiar información entre ambos lados). No soy un profesional en tipos de objetos de JavaScript, así que voy a dejar que a usted.
Primero, cree una clase JavaScriptHandler
con una referencia a su actividad que controla la WebView
:
public class JavaScriptHandler { MyActivity parentActivity; public JavaScriptHandler(MyActivity activity) { parentActivity = activity; } public void doSomething(<Your blob format> data){ // ............. // ..Some code.. // ............. } }
Después de eso, agregará su JavaScriptHandler
a su WebView
en su Activity
principal. ¡No olvide activar JavaScript en su WebView
!
myWebView = (WebView)this.findViewById(R.id.myWebView); myWebView.getSettings().setJavaScriptEnabled(true); myWebView.addJavascriptInterface(new JavaScriptHandler(this), "MyHandler");
El primer parámetro pasado a addJavaScriptInterface () es el propio objeto de interfaz JavaScript. El segundo parámetro es el nombre de la variable JavaScript global a la que está vinculado el objeto de interfaz JavaScript.
Ahora todo lo que tienes que hacer es llamar a su método Java
con JavaScript
.
<html> <head> <script type="text/javascript"> function displaymessage() { MyHandler.doSomething(<Your Blob>); } </script> </head> <body> <form> <input type="button" value="Click me!" onclick="sendBlob()" /> </form> </body> </html>
Encontré una solución convirtiendo el blob a Base64 String
var reader = new window.FileReader(); reader.readAsDataURL(blob); reader.onloadend = function() { var base64data = reader.result; // send base64data string to android as a method param }
Puede utilizar descargador de archivos simple utilizando JavaScript.
Aquí hay un ejemplo para descargar blob como archivo.
var saveData = (function() { var a = document.createElement("a"); document.body.appendChild(a); a.style = "display: none"; return function(data, fileName) { var json = JSON.stringify(data), blob = new Blob([json], { type: "octet/stream" }), url = window.URL.createObjectURL(blob); a.href = url; a.download = fileName; a.click(); window.URL.revokeObjectURL(url); }; }()); var data = { x: 42, s: "hello, world", d: new Date() }, fileName = "my-download.json"; saveData(data, fileName);
- Adb de Android empuja a la ubicación en el dispositivo sin tarjeta sd y sin acceso root
- Android Parse SDK i / o fallo formato desconocido (número mágico 227b)