qw-utils
Version:
qw Utils package
73 lines (71 loc) • 2.48 kB
JavaScript
;
var _interopRequireDefault = require("/Users/lxy/qw-utils/node_modules/@babel/runtime/helpers/interopRequireDefault.js").default;
var _defineProperty2 = _interopRequireDefault(require("/Users/lxy/qw-utils/node_modules/@babel/runtime/helpers/esm/defineProperty.js"));
var _clipboard = _interopRequireDefault(require("clipboard"));
var _cryptoUtils = require("./cryptoUtils");
class clipboardUtils {
constructor() {
// 读取剪贴板
(0, _defineProperty2.default)(this, "readClipboard", () => {
return new Promise((resolve, reject) => {
if (navigator.clipboard?.readText) {
navigator.clipboard.readText().then(text => {
if (!text) reject('剪贴板为空或者不包含文本');
return resolve(text);
});
} else reject('浏览器不支持或禁止访问剪贴板,请使用快捷键 Ctrl + V');
});
});
// 解析加密后的剪贴板内容
(0, _defineProperty2.default)(this, "pasteCustomClipboardString", text => {
let clipboardData;
try {
clipboardData = JSON.parse(new _cryptoUtils.cryptoUtils().decrypt(text));
} catch {
clipboardData = text;
}
return clipboardData;
});
}
/**
* 复制文本到剪贴板
* @param text 文本内容
*/
copyText(text) {
return new Promise((resolve, reject) => {
const fakeElement = document.createElement('button');
const clipboard = new _clipboard.default(fakeElement, {
text: () => text,
action: () => 'copy',
container: document.body
});
clipboard.on('success', e => {
clipboard.destroy();
resolve(e);
});
clipboard.on('error', e => {
clipboard.destroy();
reject(e);
});
document.body.appendChild(fakeElement);
fakeElement.click();
document.body.removeChild(fakeElement);
});
}
// 尝试解析剪贴板内容是否为Excel表格(或类似的)数据格式
pasteExcelClipboardString(text) {
const lines = text.split('\r\n');
if (lines[lines.length - 1] === '') lines.pop();
let colCount = -1;
const data = [];
for (const index in lines) {
data[index] = lines[index].split('\t');
if (data[index].length === 1) return null;
if (colCount === -1) colCount = data[index].length;else if (colCount !== data[index].length) return null;
}
return data;
}
}
module.exports = {
clipboardUtils
};