Перетащите изображение из ячейки таблицы в область перетаскивания iFrame
У меня проблемы с перетаскиванием изображения из одного iframe (1) из динамической таблицы в другой iframe (2) в области, доступной для удаления. Я думаю, что это не проблема с разрешением, а проблема "типа". Область перетаскивания в iframe (2) работает с файлами из любого места, кроме iframe (1). Iframe (1) размещен на localhost. Iframe (2) размещен в другом домене. Были протестированы три разные функции, которые я нашел для преобразования URI данных в файл или blob. Аргументы setData также были протестированы со всеми возможностями, но пока безуспешно. Интересно, что открыв сайт с двумя фреймами в Chrome и firefox, я могу перетащить падение из firefox в Chrome, но изображение будет преобразовано в тип BMP и переименовано! Другой способ не работает.
- Каковы правильные аргументы для setData / get Data для размещения URI данных изображения в области перетаскивания?
- Нужно ли мне преобразовывать данные uri в файл соотв. объект blob?
- Если да, то опять же, какие аргументы помогут?
Любая помощь будет очень признательна!
var dataUri;
var file;
function mouseDown(event){
toDataURL(event.target.src, function(dataUrl) {
console.log('RESULT:', dataUrl.replace('data:text/plain;base64,', ''));
dataUri = dataUrl.replace('data:text/plain;base64,', '');
file = urltoFile(dataUrl, 'hello.jpg','image/jpeg')
.then(function(file){ console.log(file);});
})
}
function drag(event) {
// event.stopPropagation();
console.log(file);
console.log(dataUri);
event.dataTransfer.setData("text/plain", file);
//event.dataTransfer.mozSetDataAt("application/x-moz-file", file, 0);
event.dataTransfer.effectAllowed = "move";
}
function drop(event) {
//event.preventDefault();
console.log(file);
console.log(dataUri);
var data = event.dataTransfer.getData("text/plain");
//var data = event.dataTransfer.mozGetDataAt("application/x-moz-file", 0);
event.target.appendChild(document.getElementById(data));
document.getElementsById(data);
console.log(data);
}
function allowDrop(event) {
event.preventDefault();
}
function dataURLtoFile(dataurl, filename) {
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, {type:mime});
}
function urltoFile(url, filename, mimeType){
return (fetch(url)
.then(function(res){return res.arrayBuffer();})
.then(function(buf){return new File([buf], filename,{type:mimeType});})
);
}
function dataURItoBlob(dataURI) {
// convert base64 to raw binary data held in a string
// doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this
var byteString = atob(dataURI.split(',')[1]);
// separate out the mime component
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
// write the bytes of the string to an ArrayBuffer
var ab = new ArrayBuffer(byteString.length);
var dw = new DataView(ab);
for(var i = 0; i < byteString.length; i++) {
dw.setUint8(i, byteString.charCodeAt(i));
}
// write the ArrayBuffer to a blob, and you're done
return new Blob([ab], {type: mimeString});
}