欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

navigator.clipboard undefined 剪切板 剪贴板 复制粘贴 navigator.clipboard为undefined 有大用 有大大用 有大大大用

复制粘贴 navigator.clipboard为undefined

image.png

这是正常的clipboard对象


image.png

这是非正常的clipboard对象



undefined原因是因为navigator.clipboard对象只能在安全网络环境中才能使用,也就是,localhost中,或者https中才能正常使用,直接用ip地址访问时不可以的呢


       

另,剪贴板禁用提醒

image.png                


   

来自  https://www.jianshu.com/p/88d3f45afa7b    


   

navigator.clipboard的undefined类问题的解决方法一则

我们在本地制作剪贴板的一些功能时,会遇到无法实现的问题。console.log(navigator.clipboard)会返回undefined。

其实原因是,该API跟其他很多接口一样,需要一个安全链接。如果测试网址不是https的,浏览器就会禁止使用该接口。

相关说明:https://web.dev/async-clipboard/    

下面介绍一则解决方法:

   

就是将本地地址添加到浏览器的白名单里。

浏览器里打开chrome://flags。启用配置“Insecure origins treated as secure”。(或者直接打开:edge://flags/#unsafely-treat-insecure-origin-as-secure)并将测试网址添加到白名单里。

如下图所示,假设我本地测试地址是http://local/***

image.png


       


本篇文章相关标签:

来自 https://10.1pxeye.com/navigator-clipboard%E7%9A%84undefined%E7%B1%BB%E9%97%AE%E9%A2%98%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95%E4%B8%80%E5%88%99/    


   


js 复制内容到剪贴板,解决navigator.clipboard Cannot read properties of undefined (reading ‘writeText‘)

之前写过一个文章,是实现了点击按钮实现复制功能,链接在此:https://blog.csdn.net/qq_58340302/article/details/123847964?spm=1001.2014.3001.5502

这个实现方法在本地运行的时候点儿问题都没有,但是!

但是将他拿到测试环境时,bug出现了,报错如下:

经查找资料发现是浏览器禁用了非安全域的 navigator.clipboard 对象。

安全域包括本地访问与开启TLS安全认证的地址,如 https 协议的地址、127.0.0.1 或 localhost 。

所以要解决这个bug就是要做一个兼容写法,在安全域下使用 navigator.clipboard 提升效率,非安全域退回到 document.execCommand('copy'); 保证功能一直可用。

  1. // 先给要复制的文本或者按钮加上点击事件后,并将要复制的值传过来
  2. async copyValue(val) {
  3. if (navigator.clipboard && window.isSecureContext) {
  4. // navigator clipboard 向剪贴板写文本
  5. this.$message.success('复制成功')
  6. return navigator.clipboard.writeText(val)
  7. } else {
  8. // 创建text area
  9. const textArea = document.createElement('textarea')
  10. textArea.value = val
  11. // 使text area不在viewport,同时设置不可见
  12. document.body.appendChild(textArea)
  13. textArea.focus()
  14. textArea.select()
  15. this.$message.success('复制成功')
  16. return new Promise((res, rej) => {
  17. // 执行复制命令并移除文本框
  18. document.execCommand('copy') ? res() : rej()
  19. textArea.remove()
  20. })
  21. }
  22. },

运行一下,本地和测试环境都没问题啦 ~

时隔半个多月后,又发现了bug,这个方法在微信浏览器打开是不生效的,所以又找到了个新方法,有需要的话可以参考一下vue 适配微信浏览器 实现点击按钮复制文本 clipboard_Naive_Jam的博客-CSDN博客

文章知识点与官方知识档案匹配,可进一步学习相关知识
普通分类: