我正在研究React js,我使用npm创建了我的应用程序,并使用create-react-app进行了构建。我试图构建一个按钮,以将图像复制到剪贴板中。幸运的是,我找到了这个 npm库,似乎可以正常工作!但是,我一直在考虑为什么我不能使用内置的异步剪贴板API来复制该图像(文本复制功能正常)。我在这里读了一篇非常启发性的指南(链接),并继续阅读其他很棒的指南(链接),所以我尝试了所有建议的代码,在那里和其他页面(尽管它们似乎并不真正改变功能,但我还是得尝试)。每次尝试都出现相同的错误,无法编译:“'ClipboardItem'未定义no-undef”。例如,其中一个代码如下:
const response = await fetch('valid img url of a png image');
const blob = await response.blob();
await navigator.clipboard.write([new ClipboardItem({ 'image/png': blob})]);
似乎很简单,容易跟进。问题是当您需要将数据放在剪贴板可以读取的表单中时,将其转换为Blob,因为我需要ClipboardItem构造函数,但我的应用似乎无法识别它。始终返回ClipboardItem未定义,或者如果我某种方式定义它,则说它不是构造函数,当然。我尝试使用其他构造函数,例如Blob(),但是遇到了相同的问题。最后一件事让我思考,由于我是编程世界的新手,是否有某种基本的东西我不知道像这样的Web API与node或Reactjs的交互,如果有解决方案,当然!谢谢你们的支持,你们真棒!
编辑:根据要求添加整个组件代码:
import React from "react";
function TestingClipAPI () {
async function handleScreenshot () {
const response = await fetch('https://i.postimg.cc/d0hR8HfP/telefono.png');
const blob = await response.blob();
await navigator.clipboard.write([new ClipboardItem({ 'image/png': blob})]);
};
return (
<div>
<button onClick={handleScreenshot} id="buttonID">test</button>
</div>
)
};
export default TestingClipAPI;
可能的问题: 这可能是由于 CRA(Create-React-App)配置引起的 - 类似问题。可以使用类似此库的内容,创建画布并从中复制图像。
解决方案或使其正常工作的方法: 在使用ClipboardItem之前,按照以下方式进行调用:const { ClipboardItem } = window;
注意:这也适用于其他构造函数,例如toBlob和HTMLCanvasElement,它们具有相同的问题。