我在我的WebView中有一個Blob對象,我該如何將它傳遞給Android?
我想將它保存到設備上的本地文件。如何將JavaScript中的Blob對象傳遞給Android?
我一直試圖用:
var url = webkitURL.createObjectURL(myBlob);
但我沒有能夠將其下載到設備。
我在我的WebView中有一個Blob對象,我該如何將它傳遞給Android?
我想將它保存到設備上的本地文件。如何將JavaScript中的Blob對象傳遞給Android?
我一直試圖用:
var url = webkitURL.createObjectURL(myBlob);
但我沒有能夠將其下載到設備。
我用BLOB轉換爲Base64編碼字符串
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 java如何將base64編碼的字符串轉換回二進制文件? – dangerChihuahua007
@DavidFaux使用'android.util.Base64',並看看你從WebView中得到了什麼,我不記得它是否以mime類型爲前綴。但至於解碼,'android.util.Base64'應該做的工作。 –
謝謝,這適用於10mb以下的小塊。我認爲hex64編碼會導致Chromium崩潰,例如大小爲50mb的大塊。 – dangerChihuahua007
我還沒有嘗試過這一點,但我能夠找到一些信息指向與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>
您可以使用使用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);
這會提醒用戶他是否想保存該文件,並將其保存在公共存儲器中。 –
是的,如果你想保存文件,你可以使用html5的文件api,這裏是http://www.html5rocks.com/en/tutorials/file/dndfiles/ –
能否請你添加一些代碼的? – Blubberguy22
相關:http://stackoverflow.com/questions/2250917/passing-a-javascript-object-using-addjavascriptinterface-on-android – BSMP