gaoluyang
2026-06-24 c0cb161bb52ce0fbdce5c66ec391d107c75e2452
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import { openWindow } from './window';
 
const SAFE_PROTOCOLS = new Set(['http:', 'https:']);
 
/**
 * URL 验证
 * @param path URL 路径
 */
export function isUrl(path: string): boolean {
  try {
    return Boolean(new URL(path));
  } catch {
    return false;
  }
}
 
/** URL 是否可安全打开 */
export function isOpenableUrl(url?: null | string): boolean {
  if (!url) {
    return false;
  }
  try {
    const parsed = new URL(url, window.location.origin);
    return SAFE_PROTOCOLS.has(parsed.protocol);
  } catch {
    return false;
  }
}
 
/** 打开安全 URL */
export function openSafeUrl(url?: null | string): void {
  if (!url || !isOpenableUrl(url)) {
    return;
  }
  openWindow(url);
}