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:

var url = webkitURL.createObjectURL(myBlob); 

Pero no he podido descargarlo al dispositivo.

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); 
  • WebView java.lang.SecurityException: No hay permiso para modificar el hilo dado
  • ¿Tiene el nuevo Android WebView el mismo rendimiento que CrossWalk WebView?
  • ¿Es posible acceder a la caché WebView?
  • WebRTC llega a Android WebView? ¿Cuando?
  • Adición de un diálogo de progreso en una vista web
  • ¿WebView saveState () preserva variables / entorno de JavaScript?
  • Cómo enviar datos POST con código en una vista web de Android
  • Android - WebView no reproduce videos de YouTube
  • ¿Por qué se detiene el Javascript cuando presiona mucho tiempo en un dispositivo Android o iOS?
  • Android Phonegap 2.1> 2.2 Error de actualización
  • Vista Web de Android: la página web debe ajustarse a la pantalla del dispositivo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.