我的應用程式壞了,我很確定這不是我改變的。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 復制影像,它仍然有效!我嘗試了 Edge(基于鉻)并遇到了同樣的問題。我嘗試將有問題的影像粘貼到基于網路的 Gmail 中,并且成功了!(顯然,谷歌仍然知道如何獲得好東西!)。我怎樣才能得到好東西呢?試圖分析新的文本 DataTransferItem 東西,但仍然有點卡住。
uj5u.com熱心網友回復:
好吧,總是做一些控制臺日志記錄,你會發現 chrome 實際上將檔案資料存盤在陣列的第二項中,所以如果你只想粘貼一張影像,請使用 js find
編輯:忘了你當然不能在DataTransferItemList上使用查找,但你可以回圈和匹配這里是一個例子
例子:
window.addEventListener('paste', pasteEvent => {
let item;
for (const x of pasteEvent.clipboardData.items) {
if(x.type.indexOf("image") === 0){
item = x;
break;
}
}
if (item) {
document.querySelector('body').insertAdjacentHTML("beforeend",item.type " : " item.kind "<br/>")
}})
<html>
<body>
</body>
</html>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/535668.html
