uni-app 复制粘贴

该代码可同时支持操作系统粘贴板,可设置/获取系统粘贴板中的文本内容。

const CopyUtils = {

	doCopy(content) {
		if(!content) {
			console.log('复制的内容为空 !')
			return;
		}
		content = typeof content === 'string' ? content : content.toString() // 复制内容,必须字符串,数字需要转换为字符串
		/**
		 * 小程序端 和 app端的复制逻辑
		 */
		//#ifndef H5
		uni.setClipboardData({
			data: content,
			success: function() {
				//success("复制成功~")
				console.log('success');
			},
			fail:function(){
				console.log("复制失败~")
			}
		});
		setClipboardText(content);
		//#endif

		/**
		 * H5端的复制逻辑
		 */
		// #ifdef H5
		if (!document.queryCommandSupported('copy')) { //为了兼容有些浏览器 queryCommandSupported 的判断
			// 不支持
			console.log('浏览器不支持')
			return;
		}
		let textarea = document.createElement("textarea")
		textarea.value = content
		textarea.readOnly = "readOnly"
		document.body.appendChild(textarea)
		textarea.select() // 选择对象
		textarea.setSelectionRange(0, content.length) //核心
		let result = document.execCommand("copy") // 执行浏览器复制命令
		if(result){
			console.log("复制成功~")
		}else{
			console.log("复制失败,请检查h5中调用该方法的方式,是不是用户点击的方式调用的,如果不是请改为用户点击的方式触发该方法,因为h5中安全性,不能js直接调用!")
		}
		textarea.remove()
		// #endif
	},

	setClipboardText(text){
		try{
			var os = plus.os.name;
			text = text||'';
			if('iOS' == os){
				var pasteboard = plus.ios.invoke('UIPasteboard', 'generalPasteboard');
				plus.ios.invoke(pasteboard, 'setValue:forPasteboardType:', text, 'public.utf8-plain-text');
			}else{
				var main = plus.android.runtimeMainActivity();
				var clip = main.getSystemService('clipboard');
				plus.android.invoke(clip, 'setText', text);
			}
		}catch(e){
			console.error('error @setClipboardText!!');
		}
	},

	getClipboardText(){
		try{
			var os = plus.os.name;
			if('iOS' == os){
				var pasteboard = plus.ios.invoke('UIPasteboard', 'generalPasteboard');
				return plus.ios.invoke(pasteboard, 'valueForPasteboardType:', 'public.utf8-plain-text')
			}else{
				var main = plus.android.runtimeMainActivity();
				var clip = main.getSystemService('clipboard');
				return plus.android.invoke(clip, 'getText');
			}
		}catch(e){
			console.error('error @getClipboardText!!');
		}
	}

}


export default CopyUtils;