Как передать объект Blob с javascript на Android?
У меня есть объект Blob внутри моего WebView, как я могу передать его на Android?
Я хочу сохранить его в локальном файле на устройстве.
Я пытался использовать:
var url = webkitURL.createObjectURL(myBlob);
Но я не смог загрузить его на устройство.
Ответы
Ответ 1
Я нашел решение, преобразовывая 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
Я не пробовал это, но мне удалось найти некоторую информацию, указывающую на использование интерфейсов Javascript с WebView. В принципе, вы можете назначить Java Classes работать как классы Javascript в вашем WebView (и обмениваться информацией между обеими сторонами).
Я не являюсь профессионалом в отношении типов объектов 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
. Не забудьте включить JavaScript в своем WebView
!
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>
Ответ 3
Вы можете использовать простой загрузчик файлов с помощью 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);