navigator.clipboard.write: 'Буфер обмена': метод получения итератора не вызывается - PullRequest
1 голос
/ 09 октября 2019

Я пытаюсь использовать navigator.clipboard.write(blob), чтобы скопировать DOMString в буфер обмена. Я могу использовать clipboard.writeText('text') и скопировать его, но мне нужен текст / html.

Пример, который не работает:

const copy = async () => {
 await navigator.permissions.query({name: "clipboard-write"}).then(result => {
    if (result.state == "granted" || result.state == "prompt") {
        const data = new Blob(['<div>test</div>'], {type : 'text/html'})
        navigator.clipboard.write(data);
    }
})}

Когда я запускаю его, я получаю следующееошибка:

Uncaught (в обещании) TypeError: Не удалось выполнить «запись» в «Буфер обмена»: средство получения итератора не вызывается.

Я также попытался изменить текст/ html to text / plain, который, я думал, заставил бы его функционировать так же, как writeText, но не сделал этого.

Затем я попытался обернуть BLOB-объект в новый ClipboardItem, который я нашел из другого вопроса:

const data = new Blob(['<div>test</div>'], {type: 'text/html'})
const item = new ClipboardItem({'text/html': data});
navigator.clipboard.write(item);

Любое руководство будет оценено.

1 Ответ

1 голос
/ 19 октября 2019

Согласно https://www.w3.org/TR/clipboard-apis/#clipboard-interface, Clipboard.write принимает последовательность ClipboardItem с. Вы пробовали что-то подобное вместо этого?

navigator.clipboard.write([item]);

Однако обратите внимание, что Chrome (79.0.3945.2/Canary, на момент написания статьи), похоже, не поддерживает написание «text /html »через API буфера обмена - только« text / plain »и« image / png ».

...