什么是DataTransferItemList以及DataTransferItemList.add在做什么?

时间:2014-12-03 02:57:43

标签: javascript google-chrome

因此,我尝试了解Google Chrome中的pastecopy API。我也不明白。

截至发稿时,您可能希望使用javascript 在剪贴板中添加内容。我正在使用图片(字符串实际上工作得很好 1 ):

//Get DataTransferItemList
var files = items.items;

if(files) {
  console.log(files);
  //Create blob from canvas
  var blob = Blob.fromDataURL(_this.editor.selection.getSelectedImage().toDataURL("image/png"));

  var file;
  try {
    //Try to create file from blob, which may fail
    file = new File([blob], "image.png", {type:"image/png"}); 
  }
  catch(e) {
    return false;
  }
  if(file) {
    //I think this should clear previous data from clipboard
    files.clear();
    //Add a file as image/png
    files.add(file, "image/png");
  }
  //console.log(files.add(file));
}

问题是,我真的不知道add方法是如何工作的。我发现this "documentation" for DataTransferItemList说:

    add(any data, optional DOMString type)

什么任何数据? (怎么有人甚至可以在文档中写这个?)当某些东西被添加到剪贴板中时,我不知道它是什么。我无法将其粘贴到任何地方 - 除了Chrome。如果我使用我复制的文件检查粘贴事件,则它位于DataTransferItemList:

DataTransferItemList

它可以转换为文件,但如果我尝试将其转回<img>

ImageEditorKeyboard.prototype.processFile = function(file) {
  //File reader converts files to something else
  var reader = new FileReader();
  //Refference to this class
  var _this = this;
  //happens when the file is loaded
  reader.onload = function(event) {
    var img = new Image;
    img.onload = function() {
      _this.processImage(this);
    };
    img.src = event.target.result;
  }; // data url!
  //Read file
  reader.readAsDataURL(file);
}

我收到错误 2

GET data: net::ERR_INVALID_URL

如果我记录event.target.result的值,则结果是数据为空:

console.error("String '", event.target.result, "' ain't a valid URL!");

String ' data: ' ain't a valid URL!

  • 问: DataTransferItemList的确切规范是什么,它的方法和属性,尤其是.add方法?

1:要将字符串添加到剪贴板(当然,在复制事件期间!),请调用:event.clipboardData.setData(data, "text/plain");。第二个论点似乎没有任何功能 - 使用image/png将不会做任何事情。

2:有趣的是这个error can't be caught

0 个答案:

没有答案