解决clipboard.js在IOS上无法复制异步获取的文本的问题


一、问题详情

使用clipboard.js复制从接口异步获取的文本时,PC及安卓都正常。在IOS中提示复制成功但实际剪切板中无文本。


二、解决方案

  • 思路:
    • 将触发复制元素和传入ClipboardJs构造函数的元素分开,期望在异步获取文本后,再同步触发传入ClipboardJs构造函数的元素的点击事件,发现这只能解决在PC和安卓中异步复制的问题,但IOS中依然无法生效。
    • 基于上面的思路,决定在点击触发复制元素,异步获取文本,在IOS中再次用代码触发复制元素的点击事件,代码如下:
  • HTML代码
  <button id="copy-btn" @click="onCopy">复制文本</button>
  <div id="copy-div" />
  • vuejs代码
export default {
	data() {
		return {
			copyStr: ''
		}
	},
	mounted() {
		const that = this
		this.clipboard = new ClipboardJS('#copy-div', {
			text() {
				return that.copyStr
			}
		})
		this.clipboard.on('success', () => {
			console.log('success')
		})
		this.clipboard.on('error', () => {
			console.log('error')
		})
	},
	methods: {
		onCopy() {
			if (this.copyStr) {
				document.getElementById('#copy-div').click()
			} else {
				// simulate asynchronous behavior
				setTimeout(() => {
					this.copyStr = 'helloWord'
					if (isIOS) {
						document.getElementById('#copy-btn').click()
					} else {
						document.getElementById('#copy-div').click()
					}
				}, 1000)
			}
		}
	}
}

三、总结

  • 不算完美的方案,但算解决了问题。
  • 不足之处,多次触发点击事件,代码不够优雅。
  • 如有更好方式欢迎评论交流!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值