1

当我尝试对pasteChrome 中的事件做出反应以让用户将文件系统中的多个文件粘贴到我的 Web 前端时,我有一个非常奇怪的行为。

这是我注册到paste事件的函数的代码:

let pasteFunction = function(event, callback) {
    event.preventDefault();

    if (!event.originalEvent && !event) {
        return;
    }

    let regardedEvent = (event.originalEvent || event)
    let items = regardedEvent.clipboardData.items;

    if(items === undefined){
        return;
    };

    Array.prototype.forEach.call(regardedEvent.clipboardData.files, function(file) {
        callback(file);
    });
}

我没有迭代files属性,而是尝试了这个:

for (var i = 0; i < items.length; i++) {
    let content = items[i]
    if (content.kind !== 'file') continue;
    var blob = content.getAsFile();

    if (blob === null) {
        continue;
    }
    callback(blob);
}

这种方法存在多个问题:

  • 数组总是只包含一个文件,不管我复制多少
  • 它不适用于图像以外的文件
  • 不保留文件名(始终image.png

当我在 Safari 中尝试时,一切都像魅力一样。这是否意味着 Chrome 的安全策略不允许我按预期使用剪贴板 API?或者有什么我可以做的吗?

MacOS Sierra (10.12.6) - Chrome 65.0.3325.181

4

0 回答 0