Browse Source

粘贴板判断

pull/81/head
zq 3 days ago
parent
commit
f1fffd65d1
  1. 128
      src/utils/clipboard.js

128
src/utils/clipboard.js

@ -8,75 +8,87 @@
* @returns {Promise<boolean>} 是否复制成功 * @returns {Promise<boolean>} 是否复制成功
*/ */
export function copyToClipboard(text, options = {}) { export function copyToClipboard(text, options = {}) {
const { const {
successMsg = '复制成功', successMsg = '复制成功',
errorMsg = '复制失败,请手动复制', errorMsg = '复制失败,请手动复制',
vm = null vm = null
} = options; } = options;
return new Promise((resolve) => { return new Promise((resolve) => {
// 创建textarea元素 // 创建textarea元素
const textarea = document.createElement('textarea'); const textarea = document.createElement('textarea');
textarea.value = text; textarea.value = text;
textarea.style.position = 'fixed'; // 防止页面滚动 textarea.style.position = 'fixed'; // 防止页面滚动
document.body.appendChild(textarea); document.body.appendChild(textarea);
textarea.select(); textarea.select();
try { try {
// 执行复制命令 // 执行复制命令
const successful = document.execCommand('copy'); const successful = document.execCommand('copy');
if (successful) { if (successful) {
if (vm && vm.$Message) {
vm.$Message.success(successMsg);
} else {
console.log(successMsg);
}
resolve(true);
} else {
throw new Error('Copy command was unsuccessful');
}
} catch (err) {
console.error('复制失败:', err);
if (vm && vm.$Message) { if (vm && vm.$Message) {
vm.$Message.error(errorMsg); vm.$Message.success(successMsg);
} else { } else {
console.error(errorMsg); console.log(successMsg);
} }
resolve(false); resolve(true);
} finally { } else {
document.body.removeChild(textarea); throw new Error('Copy command was unsuccessful');
} }
}); } catch (err) {
} console.error('复制失败:', err);
if (vm && vm.$Message) {
vm.$Message.error(errorMsg);
} else {
console.error(errorMsg);
}
resolve(false);
} finally {
document.body.removeChild(textarea);
}
});
}
/** /**
* @param {string} text 要复制的文本 * @param {string} text 要复制的文本
* @param {Object} options 配置选项 * @param {Object} options 配置选项
* @returns {Promise<boolean>} 是否复制成功 * @returns {Promise<boolean>} 是否复制成功
*/ */
export async function modernCopyToClipboard(text, options = {}) { export async function modernCopyToClipboard(text, options = {}) {
const { const {
successMsg = '复制成功', successMsg = '复制成功',
errorMsg = '复制失败,请手动复制', // errorMsg = '复制失败,请手动复制',
vm = null vm = null
} = options; } = options;
try { // try {
// 使用现代剪贴板API // 使用现代剪贴板API
if(navigator?.clipboard && navigator?.clipboard?.writeText){ // if(navigator?.clipboard && navigator?.clipboard?.writeText){
await navigator?.clipboard?.writeText(text); // await navigator?.clipboard?.writeText(text);
if (vm && vm.$Message) { // if (vm && vm.$Message) {
vm.$Message.success(successMsg); // vm.$Message.success(successMsg);
} else { // } else {
console.log(successMsg); // console.log(successMsg);
} // }
return true; // return true;
// }
// } catch (err) {
// console.error(errorMsg, err);
// 现代API失败后回退到传统方法
// return copyToClipboard(text, options);
// }
debugger
if (navigator.clipboard && window.isSecureContext) {
console.log('走了1111');
await navigator?.clipboard?.writeText(text);
if (vm && vm.$Message) {
vm.$Message.success(successMsg);
} else {
console.log(successMsg);
} }
} catch (err) { } else {
console.error(errorMsg, err); return copyToClipboard(text, options);
// 现代API失败后回退到传统方法
return copyToClipboard(text, options);
}
} }
}
export default modernCopyToClipboard; export default modernCopyToClipboard;
Loading…
Cancel
Save