javascript - 将图像和 json 对象写入剪贴板
问题描述
我正在尝试使用剪贴板 API 将图像和 json 对象写入窗口剪贴板。(我正在使用 vue 和电子)我成功地编写了图像和纯文本,但是当我尝试编写 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) => {
if (result.state === 'granted' || result.state === 'prompt') {
navigator.clipboard.write([item]);
}
}
}, 'image/png');
在这种情况下,它会向我显示错误,但如果我'application/json': objBlob
在项目中删除它就会起作用。看起来剪贴板不接受 json 对象。真奇怪。
但是,我想将一个对象与图像一起写入剪贴板。有什么办法可以解决这个问题吗?也许我应该使用剪贴板 API 以外的其他东西?
先感谢您!
解决方案
我添加了一个 catch 来查看实际错误:DOMException: Write type application/json not supported。
如果您使用纯文本或 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) => {
if (result.state === 'granted' || result.state === 'prompt') {
navigator.clipboard.write([item]).catch((ex) => {
console.log(ex)
} );
}
});
推荐阅读
- python - Keras:fit_generator() 将文本批量输入模型
- angular - 让 Angular 应用程序与 NginX RP 不可修改的 URL 一起工作
- r - 在 Shiny 中直接访问 Webshot 图像
- python - Sympy - 将多项式分成两部分,正数和负数
- docker - 处理 docker 桌面的 daemon.json 有点混乱
- php - 在 WooCommerce 3+ 中将购物车总数作为浮点数获取
- android - com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings。
(SdkManagerCliSettings.java:428) - python - 什么可能导致 Python 无法读取新云服务器上的 .pyc 或 .pyd 文件?
- javascript - Chartjs 勾选客户风格
- sql - 您如何使用 EITHER 或在具有多个 WHERE 语句的两列之间编写 Teradata SQL 语句?