我有一个按钮
当我点击复制
copyImageLinkText({ mouseenter, mouseleave }, e) {
this.showCopiedText = !this.showCopiedText
navigator.clipboard.writeText(this.imageLink)
clearTimeout(this._timerId)
mouseenter(e)
this._timerId = setTimeout(() => mouseleave(e), 1000)
},
这条线在我的MacBook Pro上似乎可以完美地在本地工作
navigator.clipboard.writeText(this.imageLink)
当我构建并部署到我的开发服务器时,它不工作。
TypeError:无法读取未定义的属性(阅读“writeText”)
3条答案
按热度按时间uujelgoq1#
navigator.clipboard
的使用需要一个安全的来源。因此,如果您的开发环境是通过HTTP服务的,那么剪贴板方法将不可用。Clipboard
文档 *此功能仅适用于secure contexts(HTTPS)以及部分或所有支持的浏览器。
也许您可以检查
window.isSecureContext
是否可以使用此方法,并相应地禁用复制文本按钮。变通方案
最好的选择是在你的开发环境中使用HTTPS。
但既然你要求一个变通方案,这里有一个(非常黑客)的工作方法。使用
Document.exec
命令,这不再是推荐的,而有利于ClipboardAPI
。用法
然后,您可以检查是否为
!navigator.clipboard
并调用fallback方法,否则继续使用普通的navigator.clipboard.writeText(...)
函数。例如:x一个一个一个一个x一个一个二个x
6fe3ivhb2#
最好使用
async
,并将代码放在try catch
块中。31moq8wy3#
我也遇到了同样的问题,这里有一个解决方案
#不要使用--x
navigator.clipboard.writeText()
#使用--〉
document.execCommand('copy')