仅修改变量名导致JavaScript剪贴板链接复制代码失效
问题原因及解决办法
核心问题出在Blob构造函数的配置项属性名是固定的type,不能随意替换成自定义变量名。
- 原代码能正常运行,是因为逻辑刚好匹配了Blob的要求:
const type = "text/html"; // 这里的 { type } 是对象简写,等价于 { type: type } // 第一个type是Blob要求的固定配置键,第二个type是你的变量名,两者刚好同名 const blob = new Blob([htmlContent], { type }); const item = new ClipboardItem({ [type]: blob }); navigator.clipboard.write([item]); - 当你把变量名改成
typeHtml后,错误地把Blob配置项也写成了{ typeHtml },这就变成了{ typeHtml: typeHtml }——但Blob构造函数只认type这个配置键来指定MIME类型,不认自定义的typeHtml,导致Blob没有正确设置内容类型,后续ClipboardItem无法识别有效内容,最终复制失败。 - 正确的写法应该是,不管你的变量名是什么,Blob配置项的键必须保留
type,变量值赋值给它即可:const typeHtml = "text/html"; // 键还是固定的type,值用你的变量typeHtml const blob = new Blob([htmlContent], { type: typeHtml }); const item = new ClipboardItem({ [typeHtml]: blob }); navigator.clipboard.write([item]);
补充说明:ClipboardItem的对象键用[typeHtml]是没问题的,因为它本质是取变量typeHtml的值(也就是"text/html")作为MIME类型键,真正出错的环节只有Blob的配置项。
内容的提问来源于stack exchange,提问作者ljdyer
相关产品推荐
相关产品推荐

