关于js复制内容到浏览器剪贴板报错:Cannot read properties of undefined (reading ‘writeText‘)的解决方案

 更新时间:2024年01月25日 08:38:41   作者:八了个戒  
这篇文章主要给大家介绍了关于js复制内容到浏览器剪贴板报错:Cannot read properties of undefined (reading ‘writeText‘)的解决方案,文中给出了详细的原因分析和解决方案,需要的朋友可以参考下

如果想直接看解决方案,请下滑到最后【完整代码】处

问题描述

开发「复制」功能

根据使用浏览器提供的原生功能 navigator.clipboard 返回的 Clipboard 对象的方法 writeText() 写文本到剪贴板。

在本地开发,或者说是在使用http://127.0.0.1:8088 或者 http://localhost:8088 本地调试时,是没有问题的,但是如果使用绑定 host 或者使用不安全域(域名+http)时,使用此功能,就会发生下面的报错:

Uncaught TypeError: Cannot read properties of undefined (reading 'writeText')

原因分析

安全问题

想必各位小伙伴或多或少会做过这样的操作,复制一下自己的个人信息然后粘贴到其他地方,看是所谓的方便如果遇到恶意有毒的钓鱼网站,那存在剪切板的信息就会一览无余,网络信息安全一直都是重中之重,所以在这方面上 navigator.clipboard 算是做足了防备。

SO~ 原因就是 浏览器禁用了非安全域的 navigator.clipboard 对象。

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

问题解决

所以要解决这个问题就是要做一个兼容的写法,当我们处于在安全域下使用 navigator.clipboard 提升效率,非安全域时退回到 document.execCommand('copy') 保证我们的复制功能一直可用。

document.execCommand

这里先说一下 document.execCommand

写过原生 Editor 编辑器大家应该都知道这个API吧,API 里面有很多方法,如:加粗/斜体/字号/字体颜色/插入图片/插入链接/复制/剪切/撤销… 具体可以看 MDN【但是这个API已经被官方废弃掉了】

「复制」功能示例:

function copy(text = ''){
	let input = document.createElement('input')
	input.style.position = 'fixed'
	input.style.top = '-10000px'
	input.style.zIndex = '-999'
	document.body.appendChild(input)
	input.value = text
	input.focus()
	input.select()
	try {
	  let result = document.execCommand('copy')
	  document.body.removeChild(input)
	  if (!result || result === 'unsuccessful') {
	    console.log('复制失败')
	  } else {
	    console.log('复制成功')
	  }
	} catch (e) {
	  document.body.removeChild(input)
	  alert('当前浏览器不支持复制功能,请检查更新或更换其他浏览器操作')
	}
}

完整代码

 function copyToClipboard(textToCopy) {
  	// navigator clipboard 需要https等安全上下文
    if (navigator.clipboard && window.isSecureContext) {
        // navigator clipboard 向剪贴板写文本
        return navigator.clipboard.writeText(textToCopy);
    } else {
     	// document.execCommand('copy') 向剪贴板写文本
        let input = document.createElement('input')
		input.style.position = 'fixed'
		input.style.top = '-10000px'
		input.style.zIndex = '-999'
		document.body.appendChild(input)
		input.value = textToCopy
		input.focus()
		input.select()
        try {
		  let result = document.execCommand('copy')
		  document.body.removeChild(input)
		  if (!result || result === 'unsuccessful') {
		    console.log('复制失败')
		  } else {
		    console.log('复制成功')
		  }
		} catch (e) {
		  document.body.removeChild(input)
		  alert('当前浏览器不支持复制功能,请检查更新或更换其他浏览器操作')
		}
    }
}

所有问题都解决啦~

总结

以上就是关于js复制内容到浏览器剪贴板报错:Cannot read properties of undefined (reading ‘writeText‘)的解决方案的详细内容,更多关于js复制内容到浏览器剪贴板报错的资料请关注脚本之家其它相关文章!

相关文章

  • js如何给json对象添加、删除、修改属性

    js如何给json对象添加、删除、修改属性

    这篇文章主要介绍了js如何给json对象添加、删除、修改属性问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • JS弹出窗口插件zDialog简单用法示例

    JS弹出窗口插件zDialog简单用法示例

    这篇文章主要介绍了JS弹出窗口插件zDialog简单用法,结合简单实例形式分析了zDialog插件弹出窗口的基本使用方法与参数含义,需要的朋友可以参考下
    2016-06-06
  • JavaScript实现简单进度条效果

    JavaScript实现简单进度条效果

    这篇文章主要为大家详细介绍了JavaScript实现简单进度条效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • javascript 常用验证函数总结

    javascript 常用验证函数总结

    随着做项目数量的越来越越多,其中用到js的地方很多相同,这里自己整理了一些常用表单验证的js方法,虽然和其他js验证框架有一定的差距,但是毕竟是自己总结的一些东西,在此与纪录分享一下。
    2016-06-06
  • js实现贪吃蛇游戏含注释

    js实现贪吃蛇游戏含注释

    这篇文章主要为大家详细介绍了js实现贪吃蛇游戏含注释,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • 躲避这些会改变原数组JavaScript数组方法让开发流畅无阻

    躲避这些会改变原数组JavaScript数组方法让开发流畅无阻

    JavaScript中有些数组的操作方法并不符合我们预期,容易导致想象不到的结果,因此,为避免这种情况的发生,本文将介绍哪些原生数组方法能改变原数组以及我对于如何更好地使用数组方法的建议
    2023-05-05
  • JavaScript简单编程实例学习

    JavaScript简单编程实例学习

    在本篇文章里小编给大家整理的是关于JavaScript简单编程实例学习内容,有兴趣的朋友们可以参考下。
    2020-02-02
  • H5基于iScroll实现下拉刷新和上拉加载更多

    H5基于iScroll实现下拉刷新和上拉加载更多

    这篇文章主要为大家详细介绍了H5基于iScroll实现下拉刷新和上拉加载更多效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 微信小程序新手入门之自定义组件的使用

    微信小程序新手入门之自定义组件的使用

    最近在用自定义组件搭建小程序,简单记录下步骤,所以这篇文章主要给大家介绍了关于微信小程序新手入门之自定义组件使用的相关资料,需要的朋友可以参考下
    2021-05-05
  • 使用SpreadJS快速清除Excel中工作表保护密码

    使用SpreadJS快速清除Excel中工作表保护密码

    这篇文章主要为大家介绍了使用SpreadJS快速清除Excel中工作表保护密码方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11

最新评论