我的应用程序坏了,我很确定这不是我做的改动。Chrome的行为最近在某个时候发生了变化。我的应用程序允许用户将剪贴板图片粘贴到浏览器中:
window.addEventListener('paste', pasteEvent => {
let item = pasteEvent.clipboardData.items[0]
if (item.type.indexOf("image") === 0 && item.kind == 'file') {
let clipboadFile = item.getAsFile()
// Setting the filename of the blob in the clipboard wasn't straightforward
// https://stackoverflow.com/questions/21720390/how-to-change-name-of-file-in-javascript-from-input-file
let blob = clipboadFile.slice(0, clipboadFile.size, item.type)
let newFile = new File([blob], 'clipboardPaste_'+Date.now(), {type: item.type})
addFiles([newFile])
pasteEvent.preventDefault();
这包括右键点击网站上的任何图片,选择“复制图片”,然后按CTRL/CMD+V将图片粘贴到我的应用程序中。这个机制已经被破坏了,但只有当图片从Chrome加载到剪贴板时(在Windows上使用截图工具仍然可以正常工作)。问题似乎是剪贴板不再被识别为图片。请参见下面的ChromeDevTools片段:第一个图像从剪切工具复制到剪贴板,第二个图像从Chrome加载到剪贴板。
我还不能看到剪贴板的确切样子(复制到记事本也不起作用)。另外值得注意的是:我试着从FireFox复制图片,它仍然工作!我试着边缘( chrome 基),也有同样的问题。我试着粘贴到基于网络的Gmail,它的工作!(谷歌仍然知道如何获得好的东西,显然!)。我如何获得好的东西呢?试图分析新的文本DataTransferItem的东西,但仍然有点卡住。
1条答案
按热度按时间yfwxisqw1#
我们总是做一些控制台日志记录,您会发现chrome实际上将filedata存储在数组的第二项中,因此如果您只想粘贴一个图像,请使用js find
**编辑:**忘记了您当然不能在DataTransferItemList上使用find,但是您可以循环并匹配,这里是一个示例
例如:
第一个