我在我的WebView中有一个Blob对象,如何将其传递给Android?
我想将其保存到设备上的本地文件中。
我一直在尝试使用:
var url = webkitURL.createObjectURL(myBlob);
但是我无法将它下载到设备中。
var reader = new window.FileReader();
reader.readAsDataURL(blob);
reader.onloadend = function() {
var base64data = reader.result;
// send base64data string to android as a method param
}
android.util.Base64
,并查看从WebView获取的内容,我不记得它是否带有mime类型前缀。但是对于解码,android.util.Base64
应该可以完成工作。 - Ilya Gazmanpublic class JavaScriptHandler {
MyActivity parentActivity;
public JavaScriptHandler(MyActivity activity) {
parentActivity = activity;
}
public void doSomething(<Your blob format> data){
// .............
// ..Some code..
// .............
}
}
接下来,您需要将JavaScriptHandler
添加到主要Activity
中的WebView
中。不要忘记在WebView
中启用JavaScript!
myWebView = (WebView)this.findViewById(R.id.myWebView);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.addJavascriptInterface(new JavaScriptHandler(this), "MyHandler");
<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>
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);