兼容性很高的复制到剪切板功能的js代码

时间:2022-09-14 21:00:07

实现原理就是:动态生成隐藏文本域,把要复制的内容放到该文本域,然后依次执行DOM里的选中,复制功能就可以(有些代码是非相关的可以忽略)。注意,不要在非直接点击触发的函数里用document.execCommand('copy')的方法,因为浏览器的安全机制会禁止使用


方法代码:

copyJson(claimId) {
var self = this;
var copyClaimJsonUrl = this.urlUtils.getBackendApiUrl("claimDetail/copyClaimJson");
var model = "";
$.ajax({
type: "get",
dataType: "json",
data: {"claimId": claimId},
async:false,
url: copyClaimJsonUrl,
success: function (data) {
if(data){
self.claimJson = JSON.stringify(data);
}

}
});

var ta =this.createTempTextArea();//创建文本域
document.body.appendChild(ta); //后缀到DOM
ta.value = this.claimJson; //赋值
ta.select(); //选中
var success =document.execCommand('copy');//复制
layer.msg("复制成功!");

}
动态生成隐藏文本域的代码:
  
createTempTextArea = function () {
var /** @type {?} */ isRTL = document.documentElement.getAttribute('dir') === 'rtl';
var /** @type {?} */ ta;
ta = document.createElement('textarea');
// Prevent zooming on iOS
ta.style.fontSize = '12pt';
// Reset box model
ta.style.border = '0';
ta.style.padding = '0';
ta.style.margin = '0';
// Move element out of screen horizontally
ta.style.position = 'absolute';
ta.style[isRTL ? 'right' : 'left'] = '-9999px';
// Move element to the same position vertically
var /** @type {?} */ yPosition = window.pageYOffset || document.documentElement.scrollTop;
ta.style.top = yPosition + 'px';
ta.setAttribute('readonly', '');
return ta;
};