提示:异步复制文字到剪切板
前言
ajax中执行复制文字,ios失效试错过程
一、遇到的问题,ios异步ajax里执行复制文字到截切版不执行
//复制文字到剪切板
function copyText(text, callback){ // text: 要复制的内容, callback: 回调
let tag = document.createElement('input');
tag.setAttribute('id', 'copy_text_input');
tag.value = text;
document.getElementsByTagName('body')[0].appendChild(tag);
document.getElementById('copy_text_input').select();
document.execCommand('copy');
document.getElementById('copy_text_input').remove();
if(callback) {callback(text)}
}
//ajax调用
$.ajax({
type:'post',
dataType: 'JSON',
url: "xxx",
data: {},
success: function (res) {
copyText(res.data)
}
});
二、解决方案
1、async: false,在setTimeout里调用复制文字的方法
//复制文字到剪切板
function copyText(text, callback){ // text: 要复制的内容, callback: 回调
let tag = document.createElement('input');
tag.setAttribute('id', 'copy_text_input');
tag.value = text;
document.getElementsByTagName('body')[0].appendChild(tag);
document.getElementById('copy_text_input').select();
document.execCommand('copy');
document.getElementById('copy_text_input').remove();
if(callback) {callback(text)}
}
//ajax调用
$.ajax({
type:'post',
dataType: 'JSON',
async: false,
url: "xxx",
data: {},
success: function (res) {
setTimeout(()=>{
copyText(res.data)
},10);
}
});
三、试错过程
解决过程中遇到的······无效······方案,大神可以指点下未成功的原因!!!
1、触发ajax事件的标签改成button
2、ajax异步改成同步执行async: false。(有文章解释ios不支持ajax异步转同步);
3、navigator.clipboard
navigator.clipboard.writeText('xxxx').then(() => { console.log('复制成功'); });
安卓报错-----无权限写入
4、使用clipboardJs
//html
<span style="display: none" class="copy_text_btn" data-clipboard-text=""></span>
//js
const clipboard = new ClipboardJS('.copy_text_btn');
clipboard .on('success', function(e) {
console.log('success',e);
});
clipboard .on('error', function(e) {
console.log('error',e);
});
$.ajax({
type:'post',
dataType: 'JSON',
async: false,
url: "xxx",
data: {},
success: function (res) {
$('.copy_text_btn').attr('data-clipboard-text',res.data);
$('.copy_text_btn').click();
}
});
安卓报错-----无权限写入
总结
踩坑路漫漫长@~@