当我尝试对paste
Chrome 中的事件做出反应以让用户将文件系统中的多个文件粘贴到我的 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