@truenewx/tnxcore
Version:
互联网技术解决方案:JavaScript核心扩展支持
88 lines (77 loc) • 2.57 kB
text/typescript
import * as NetUtil from './net.ts';
const ctrlKeyObservers: Record<string, () => void> = {};
export function getObserveCtrlKeyCurrentPage() {
return NetUtil.getAnchor();
}
export function observeCtrlKey(page: string | string[], key: string, observer: () => void): void {
if (Object.keys(ctrlKeyObservers).length === 0) {
window.onkeydown = (event: KeyboardEvent) => {
if (event.ctrlKey) {
let key = event.key + '@' + getObserveCtrlKeyCurrentPage();
let observer = ctrlKeyObservers[key];
if (observer) {
observer();
event.preventDefault();
}
}
}
}
let pages = Array.isArray(page) ? page : [page];
for (let p of pages) {
ctrlKeyObservers[key.toLowerCase() + '@' + p] = observer;
}
}
const opened: Record<string, Window> = {};
let openedIntervalId: any = null;
export function openUniquely(url: string): Window {
if (openedIntervalId === null) {
openedIntervalId = setInterval(() => {
Object.keys(opened).forEach((url: string) => {
let win = opened[url];
if (win && win.closed) {
delete opened[url];
}
});
}, 1000);
}
let win = opened[url];
if (win && !win.closed) {
win.focus();
return win;
}
win = window.open(url);
opened[url] = win;
return win;
}
export function closeWindow(): Promise<any> {
return new Promise((resolve, reject) => {
if (window.opener) {
window.close();
resolve(window.opener);
} else {
reject();
}
});
}
export function copyToClipboard(text: string): Promise<void> {
return new Promise(resolve => {
if (navigator.clipboard) {
navigator.clipboard.writeText(text).then(resolve).catch(error => {
console.error(error);
});
} else {
console.error('当前浏览器不支持 navigator.clipboard');
}
});
}
export function readFromClipboard(): Promise<string> {
return new Promise(resolve => {
if (navigator.clipboard) {
navigator.clipboard.readText().then(resolve).catch(error => {
console.error(error);
});
} else {
console.error('当前浏览器不支持 navigator.clipboard');
}
});
}