UNPKG

@truenewx/tnxcore

Version:

互联网技术解决方案:JavaScript核心扩展支持

88 lines (77 loc) 2.57 kB
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'); } }); }