我的WebView中有一个Blob对象,如何将其传递给Android? 我想将它保存到设备上的本地文件中。
我一直在尝试使用:
var url = webkitURL.createObjectURL(myBlob);
但是我无法将其下载到设备上。
答案 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下载为文件的示例。
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;