From da1328913c8bfbb5bbab83c834556a09cad07d9f Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期四, 05 十一月 2026 16:34:06 +0800
Subject: [PATCH] fix(hrm): 考勤规则打开定位后点确认报 Cannot read properties of null (reading Map)
---
src/components/map/src/utils.ts | 57 ++++++++++++++++++++++++++++++++++++++-------------------
1 files changed, 38 insertions(+), 19 deletions(-)
diff --git a/src/components/map/src/utils.ts b/src/components/map/src/utils.ts
index c5ff378..fb0bcbc 100644
--- a/src/components/map/src/utils.ts
+++ b/src/components/map/src/utils.ts
@@ -1,6 +1,17 @@
-/* eslint-disable @typescript-eslint/no-dynamic-delete */
/**
* 鐧惧害鍦板浘 SDK 鍔犺浇宸ュ叿
+ *
+ * 閲嶈锛氳繖閲屽繀椤荤洿杩� getscript锛屼笉鑳界敤 api?... 鍦板潃銆�
+ * api?v=1.0&type=webgl&ak=xxx 杩斿洖鐨勬槸涓�娈�
+ * document.write('<script src="https://api.map.baidu.com/getscript?..."></script>')
+ * 鑰岄�氳繃 document.body.append(script) 鍔ㄦ�佹彃鍏ョ殑鑴氭湰閲岋紝document.write 浼氳娴忚鍣ㄦ嫤鎴�
+ * 锛圕hrome 鐩存帴鎻愮ず "A parser-blocking, cross site script ... invoked via document.write was NOT executed"锛夛紝
+ * 瀵艰嚧鐪熸鐨� SDK 浠庢湭鍔犺浇銆亀indow.BMapGL 涓�鐩存槸 undefined/null銆�
+ * 浣� api 閲岀殑 callback 浠嶄細琚皟鐢紝璋冪敤鏂硅浠ヤ负鍔犺浇鎴愬姛锛屾帴鐫�鎵ц new BMapGL.Map()
+ * 灏辨姏鍑恒�孋annot read properties of null (reading 'Map')銆嶃��
+ *
+ * getscript 杩斿洖鐨勬槸 875KB 鐨勭湡瀹� SDK锛堝凡瀹炴祴 HTTP 200 涓斿惈 BMapGL 瀹氫箟锛夛紝
+ * 鐩存帴鐢� script.src 鍔犺浇鍗冲彲锛岃剼鏈墽琛屽畬 window.BMapGL 灏卞凡灏辩华銆�
*/
// 鎵╁睍 Window 鎺ュ彛浠ュ寘鍚櫨搴﹀湴鍥� GL API
@@ -9,9 +20,6 @@
BMapGL: any;
}
}
-
-// 鍏ㄥ眬鍥炶皟鍚嶇О
-const CALLBACK_NAME = '__BAIDU_MAP_LOAD_CALLBACK__';
// SDK 鍔犺浇鐘舵��
let loadPromise: null | Promise<void> = null;
@@ -32,30 +40,41 @@
return loadPromise;
}
+ const accessKey = String(import.meta.env.VITE_BAIDU_MAP_KEY ?? '').trim();
+ if (!accessKey) {
+ return Promise.reject(new Error('鏈厤缃� VITE_BAIDU_MAP_KEY'));
+ }
+
loadPromise = new Promise((resolve, reject) => {
const timeoutId = setTimeout(() => {
loadPromise = null;
- reject(new Error('鐧惧害鍦板浘 SDK 鍔犺浇瓒呮椂'));
+ reject(new Error('鐧惧害鍦板浘 SDK 鍔犺浇瓒呮椂锛岃妫�鏌ョ綉缁�'));
}, timeout);
- // 鍏ㄥ眬鍥炶皟
- (window as any)[CALLBACK_NAME] = () => {
- clearTimeout(timeoutId);
- delete (window as any)[CALLBACK_NAME];
- resolve();
- };
-
- // 鍒涘缓 script 鏍囩
const script = document.createElement('script');
- script.src = `https://api.map.baidu.com/api?v=1.0&type=webgl&ak=${
- import.meta.env.VITE_BAIDU_MAP_KEY
- }&callback=${CALLBACK_NAME}`;
- script.addEventListener('onerror', () => {
+ script.src = `https://api.map.baidu.com/getscript?type=webgl&v=1.0&ak=${accessKey}&services=&t=${Date.now()}`;
+ script.async = true;
+
+ script.addEventListener('load', () => {
+ clearTimeout(timeoutId);
+ if (!window.BMapGL) {
+ // ak 鏃犳晥 / 鍩熷悕鏈巿鏉� / 琚嫤鎴椂锛岃剼鏈兘鍔犺浇浣嗕笉浼氭寕杞� BMapGL
+ loadPromise = null;
+ reject(
+ new Error('鐧惧害鍦板浘鍔犺浇寮傚父锛氭湭鑾峰彇鍒板湴鍥惧璞★紝璇锋鏌� Key 鎴栧煙鍚嶆巿鏉�'),
+ );
+ return;
+ }
+ resolve();
+ });
+
+ // 娉ㄦ剰锛氫簨浠跺悕鏄� error锛屼笉鏄� onerror锛堝啓 onerror 姘歌繙涓嶄細瑙﹀彂锛�
+ script.addEventListener('error', () => {
clearTimeout(timeoutId);
loadPromise = null;
- delete (window as any)[CALLBACK_NAME];
- reject(new Error('鐧惧害鍦板浘 SDK 鍔犺浇澶辫触'));
+ reject(new Error('鐧惧害鍦板浘 SDK 鍔犺浇澶辫触锛岃妫�鏌ョ綉缁�'));
});
+
document.body.append(script);
});
--
Gitblit v1.9.3