如何将Blob对象从javascript传递到Android?

时间:2014-07-10 22:48:57

标签: javascript android html5 webview blob

我的WebView中有一个Blob对象,如何将其传递给Android? 我想将它保存到设备上的本地文件中。

我一直在尝试使用:

var url = webkitURL.createObjectURL(myBlob);

但是我无法将其下载到设备上。

3 个答案:

答案 0 :(得分:6)

我还没试过这个,但是我能够找到一些信息指向使用WebViews的Javascript接口。基本上,您可以将Java类分配为WebView中的Javascript类(并在双方之间交换信息)。 我不是JavaScript对象类型的专家,所以我会留给你。

首先,创建一个JavaScriptHandler类,其中包含对您的活动的引用,以控制WebView

public class JavaScriptHandler {
    MyActivity parentActivity;

    public JavaScriptHandler(MyActivity activity) {
        parentActivity = activity;
    }

    public void doSomething(<Your blob format> data){    
        // .............
        // ..Some code..
        // .............
    }
}

之后,您将JavaScriptHandler添加到主WebView中的Activity。别忘了在WebView中启用JavaScript!

myWebView = (WebView)this.findViewById(R.id.myWebView);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.addJavascriptInterface(new JavaScriptHandler(this), "MyHandler");

传递给addJavaScriptInterface()的第一个参数是JavaScript接口对象本身。第二个参数是JavaScript接口对象绑定的全局JavaScript变量的名称。

现在您要做的就是使用Java调用JavaScript方法。

<html>
<head>
    <script type="text/javascript">
        function sendBlob() {
            MyHandler.doSomething(<Your Blob>);
        }
    </script>
</head>

<body>
    <form>
        <input type="button" value="Click me!" onclick="sendBlob()" />
    </form>
</body>
</html>

答案 1 :(得分:6)

我通过将blob转换为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
  }

答案 2 :(得分:2)

您可以使用JavaScript来使用简单的文件下载程序。

以下是将blob下载为文件的示例。

&#13;
&#13;
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);
&#13;
&#13;
&#13;