Я пытаюсь записать изображение и объект json в буфер обмена окна с помощью API буфера обмена. (Я использую Vue и Electron) Мне удалось написать изображение и простой текст, но когда я пытаюсь написать объект JSON, он возвращает ошибку:

Uncaught (in promise) DOMException localhost/:1

Мой код (this.object является объектом JSON)

 const textBlob = new Blob(['this.object.data','this.object.data2',...], {type: 'text/plain'}); const objBlob = new Blob([JSON.stringify(this.object)], {type: 'application/json'}); // defined a canvas with an image canvas.toBlob(function(blob) { const item = new ClipboardItem({ 'image/png': blob, 'text/plain': textBlob, 'application/json': objBlob }); navigator.permissions.query({name: 'clipboard-write'}).then((result) ={amp}gt; { if (result.state === 'granted' || result.state === 'prompt') { navigator.clipboard.write([item]); } } }, 'image/png'); 

В этом случае, это показывает мне ошибку, но если я 'application/json': objBlob в элементе, тогда это работает. Похоже, буфер обмена не принимает объект json. Странно.

Тем не менее, я хочу записать объект в буфер обмена вместе с изображением. Есть ли решение для решения этой проблемы? Может быть, я должен использовать другое, чем API буфера обмена?

Заранее спасибо!

Дж. Елена Сух

новый участник этого сайта. Будьте внимательны, спрашивая разъяснения, комментируя и отвечая. Проверьте наш

Правила поведения

,

Chrome активно работает над этим, но пока они не поддерживают написание "application/JSON"

Таким образом, вы все равно должны написать его как "text/plain" (этого должно быть достаточно для большинства приложений).

 const item = new ClipboardItem({ 'image/png': blob, 'text/plain': objBlob }); 

Я добавил уловку, чтобы увидеть фактическую ошибку: DOMException: тип записи application / json не поддерживается.

Если вы используете обычный / текст или UTF, то вы сможете прочитать JSON обратно в объект.

Я бы использовал буфер обмена, только если объекты были вставлены в другое приложение, в противном случае я бы использовал локальное хранилище или хранилище сессий.

 const objBlob = new Blob([JSON.stringify({'myobjLabel' : 'myObj'})], {type: 'text/plain'}); const item = new ClipboardItem({ 'text/plain': objBlob }); navigator.permissions.query({name: 'clipboard-write'}).then((result) ={amp}gt; { if (result.state === 'granted' || result.state === 'prompt') { navigator.clipboard.write([item]).catch((ex) ={amp}gt; { console.log(ex) } ); } }); 
iProgramGUIs

новый участник этого сайта. Будьте внимательны, спрашивая разъяснения, комментируя и отвечая. Проверьте наш

Правила поведения

,