74 lines
2.1 KiB
TypeScript
74 lines
2.1 KiB
TypeScript
|
|
function H5Copy(text: string, config: TClipboardOptions) {
|
|||
|
|
const success = (result: string) => {
|
|||
|
|
if (config.showToast) {
|
|||
|
|
uni.showToast({
|
|||
|
|
title: '复制成功',
|
|||
|
|
icon: 'none'
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
config.success?.(result);
|
|||
|
|
config.complete?.(result);
|
|||
|
|
};
|
|||
|
|
const fail = (err: string) => {
|
|||
|
|
if (config.showToast) {
|
|||
|
|
uni.showToast({
|
|||
|
|
title: '复制失败',
|
|||
|
|
icon: 'none'
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
config.fail?.(err);
|
|||
|
|
config.complete?.(err);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const textarea = document.createElement('textarea');
|
|||
|
|
textarea.value = text;
|
|||
|
|
textarea.readOnly = true;
|
|||
|
|
textarea.style.position = 'absolute';
|
|||
|
|
textarea.style.left = '-9999px';
|
|||
|
|
document.body.appendChild(textarea);
|
|||
|
|
|
|||
|
|
textarea.select();
|
|||
|
|
textarea.setSelectionRange(0, text.length);
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
const result = document.execCommand('copy');
|
|||
|
|
if (result) {
|
|||
|
|
success('复制成功');
|
|||
|
|
} else {
|
|||
|
|
// console.error(`复制失败,可能不是用户主动触发点击的方式调用,因web安全性,不能js直接调用!`);
|
|||
|
|
fail('复制失败,可能不是用户主动触发点击的方式调用,因browser安全性,不能js直接调用!');
|
|||
|
|
}
|
|||
|
|
} catch (err) {
|
|||
|
|
// console.error('【Clipboard Error】:', err);
|
|||
|
|
fail(String(err));
|
|||
|
|
} finally {
|
|||
|
|
document.body.removeChild(textarea);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function UniCopy(text: string, config: TClipboardOptions) {
|
|||
|
|
const opt = Object.assign({ data: text }, config);
|
|||
|
|
uni.setClipboardData(opt);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
type TClipboardOptions = Omit<UniNamespace.SetClipboardDataOptions, 'data'>;
|
|||
|
|
|
|||
|
|
export function clipboard(content: string, options?: TClipboardOptions) {
|
|||
|
|
const text = String(content);
|
|||
|
|
const defaultOpt = {
|
|||
|
|
showToast: true,
|
|||
|
|
success: () => {},
|
|||
|
|
fail: () => {},
|
|||
|
|
complete: () => {}
|
|||
|
|
};
|
|||
|
|
const config = Object.assign(defaultOpt, options);
|
|||
|
|
|
|||
|
|
// #ifdef H5
|
|||
|
|
H5Copy(text, config);
|
|||
|
|
// #endif
|
|||
|
|
|
|||
|
|
// #ifndef H5
|
|||
|
|
UniCopy(text, config);
|
|||
|
|
// #endif
|
|||
|
|
}
|