Files
certd/packages/ui/certd-client/src/vben/shared/utils/window.ts
2026-01-31 02:07:06 +08:00

40 lines
1.1 KiB
TypeScript

interface OpenWindowOptions {
noopener?: boolean;
noreferrer?: boolean;
target?: "_blank" | "_parent" | "_self" | "_top" | string;
}
/**
* 新窗口打开URL。
*
* @param url - 需要打开的网址。
* @param options - 打开窗口的选项。
*/
function openWindow(url: string, options: OpenWindowOptions = {}): void {
// 解构并设置默认值
const { noopener = true, noreferrer = true, target = "_blank" } = options;
// 基于选项创建特性字符串
const features = [noopener && "noopener=yes", noreferrer && "noreferrer=yes"].filter(Boolean).join(",");
// 打开窗口
window.open(url, target, features);
}
/**
* 在新窗口中打开路由。
* @param path
*/
function openRouteInNewWindow(path: string) {
const { hash, origin } = location;
let pathname = location.pathname;
if (pathname.endsWith("/")) {
pathname = pathname.slice(0, -1);
}
const fullPath = path.startsWith("/") ? path : `/${path}`;
const url = `${origin}${pathname}${hash ? "/#" : ""}${fullPath}`;
openWindow(url, { target: "_blank" });
}
export { openRouteInNewWindow, openWindow };