From abfe3ffe5f6d161f2a6466c8bdbcbc17de1e64b6 Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期四, 05 十一月 2026 17:43:27 +0800
Subject: [PATCH] fix(map): v2.0 补 HOST_TYPE;诊断页延长等待并修正协议

---
 src/components/map/src/utils.ts |   58 ++++++++++++++++++++++++++++++++--------------------------
 1 files changed, 32 insertions(+), 26 deletions(-)

diff --git a/src/components/map/src/utils.ts b/src/components/map/src/utils.ts
index b170317..5fbfe95 100644
--- a/src/components/map/src/utils.ts
+++ b/src/components/map/src/utils.ts
@@ -1,23 +1,26 @@
 /**
  * 鐧惧害鍦板浘 SDK 鍔犺浇宸ュ叿
  *
- * 鍔犺浇鍦板潃浼樺厛绾э紙鎸夐『搴忓皾璇曪紝閮藉け璐ユ墠鎶ラ敊锛夛細
- *   1. /bmap-api/getscript  鈥斺�� 鏈珯 nginx 鍙嶅悜浠g悊锛屽己鍒跺洖婧愮櫨搴� IPv4
- *   2. https://api.map.baidu.com/getscript 鈥斺�� 鐩磋繛鐧惧害
+ * 鈿狅笍 鏈儴缃茬幆澧冿紙鍚鎴风鎵�鍦ㄧ綉缁滐級IPv6 涓嶉�氾紝鑰岀櫨搴︽墍鏈夋湇鍔″煙鍚嶇殑 DNS
+ * 閮戒紭鍏堣繑鍥� AAAA锛圛Pv6锛夎褰曪紝娴忚鍣ㄤ紭鍏堣繛 IPv6 浼氱珛鍗冲け璐モ�斺��
+ * 琛ㄧ幇涓� script 鐨� error 浜嬩欢 1 绉掑唴瑙﹀彂锛屽湴鍥惧畬鍏ㄥ姞杞戒笉鍑烘潵銆�
+ *   鏈嶅姟鍣ㄤ晶瀹炴祴锛歝url -4 寰楀埌 HTTP 200 / 0.94s锛沜url -6 鐩存帴澶辫触銆�
  *
- * 涓轰粈涔堣浠g悊锛堝疄娴嬬粨璁猴級锛�
- *   璇ラ儴缃茬幆澧冿紙鍚鎴风鎵�鍦ㄧ綉缁滐級IPv6 涓嶉�氾紝鑰� api.map.baidu.com 鐨� DNS
- *   浼樺厛杩斿洖 AAAA锛圛Pv6锛夎褰曪紝娴忚鍣ㄤ紭鍏堣繛 IPv6 鏃剁珛鍗冲け璐モ�斺��
- *   script 鐨� error 浜嬩欢鍦� 1 绉掑唴灏辫Е鍙戯紝鏍规湰涓嶆槸瓒呮椂銆�
- *   鏈嶅姟鍣ㄤ晶楠岃瘉锛歝url -4 寰楀埌 HTTP 200 / 0.94s锛宑url -6 鐩存帴澶辫触銆�
- *   璧板悓鍩熶唬鐞嗗悗锛屽鎴风鍙闂湰鏈� 9023锛岀敱鏈嶅姟鍣ㄧ敤鍥哄畾 IPv4 鍥炴簮锛�
- *   瀹炴祴 HTTP 200 / 879KB / 0.28s銆�
+ * 鍥犳杩欓噷鍔犺浇鐨勬槸銆屾湰绔欐敼鍐欑増 SDK銆�/bmap-sdk.js锛�
+ *   鎶� SDK 鍐呴儴鎵�鏈夌櫨搴﹀煙鍚嶏紙api.map.baidu.com銆乤pimaponline0-3.bdimg.com銆�
+ *   apisv0/1.bdimg.com銆亀ebmap0.bdimg.com銆乵ap.baidu.com 鈥︼級
+ *   鍏ㄩ儴鏇挎崲涓� window.location.host + /bmap-xxx锛�
+ *   鐢辨湇鍔″櫒 nginx 鐢ㄥ浐瀹� IPv4 鍥炴簮锛屽鎴风鍙闂湰绔� 9023銆�
+ *   锛堟敼鍐欒剼鏈敓鎴愶紝瑙� nginx bmap-proxy.conf 涓� public/bmap-sdk.js锛�
  *
- * 鍏朵粬韪╄繃鐨勫潙锛�
- *   - 涓嶈兘鐢� api?v=1.0&type=webgl锛堣繑鍥� document.write 鍖呰锛屽姩鎬佽剼鏈噷浼氳娴忚鍣ㄦ嫤鎴級
- *   - 鍔犺浇鍓嶈璁� window.BMAP_PROTOCOL = 'https'锛堢櫨搴﹀畼鏂硅姹傦級
- *   - 涓嶈缁� script 鍔� async锛圫DK 渚濊禆 document.currentScript 瀹氫綅鑷韩锛�
- *   - script 鐨勪簨浠跺悕鏄� error锛屼笉鏄� onerror
+ * 鍔犺浇椤哄簭锛�
+ *   1. /bmap-sdk.js          鈥斺�� 鏈珯鏀瑰啓鐗堬紙鐡︾墖銆佹帴鍙d篃鍏ㄩ儴璧颁唬鐞嗭級
+ *   2. /bmap-api/getscript   鈥斺�� 鏈珯鏈敼鍐欎唬鐞嗭紙鍏滃簳锛�
+ *   3. https://api.map.baidu.com/getscript 鈥斺�� 鐩磋繛鐧惧害锛圛Pv6 閫氱殑鐜鍙敤锛�
+ *
+ * 鍏朵粬娉ㄦ剰锛氬姞杞藉墠瑕佽 window.BMAP_PROTOCOL = 'https'锛�
+ * 涓嶈缁� script 鍔� async锛圫DK 渚濊禆 document.currentScript锛夛紱
+ * script 鐨勪簨浠跺悕鏄� error 涓嶆槸 onerror銆�
  */
 
 // 鎵╁睍 Window 鎺ュ彛浠ュ寘鍚櫨搴﹀湴鍥� GL API
@@ -41,18 +44,18 @@
 
     const script = document.createElement('script');
     script.src = url;
-    // 娉ㄦ剰锛氫笉瑕佽 async锛孲DK 渚濊禆 document.currentScript 瀹氫綅鑷韩
+    // 涓嶈璁� async锛歋DK 渚濊禆 document.currentScript 瀹氫綅鑷韩
 
     script.addEventListener('load', () => {
       clearTimeout(timeoutId);
       if (!window.BMapGL) {
-        reject(new Error('鑴氭湰宸蹭笅杞戒絾鏈寕杞藉湴鍥惧璞�'));
+        reject(new Error(`鑴氭湰宸蹭笅杞戒絾鏈寕杞藉湴鍥惧璞★細${url}`));
         return;
       }
       resolve();
     });
 
-    // 浜嬩欢鍚嶆槸 error锛屼笉鏄� onerror锛堝啓 onerror 姘歌繙涓嶄細瑙﹀彂锛�
+    // 浜嬩欢鍚嶆槸 error锛屼笉鏄� onerror
     script.addEventListener('error', () => {
       clearTimeout(timeoutId);
       reject(new Error(`鍔犺浇澶辫触锛�${url}`));
@@ -81,30 +84,33 @@
   }
 
   // 鐧惧害瀹樻柟瑕佹眰锛氬厛澹版槑鍗忚锛岄伩鍏� HTTPS 椤甸潰涓� SDK 鎷煎嚭 http 瀛愯祫婧愬湴鍧�
-  window.BMAP_PROTOCOL = 'https';
+  window.BMAP_PROTOCOL = window.location.protocol.replace(':', '');
+  // v2.0 蹇呴渶锛氬畼鏂� api?v=2.0 浼氳缃� HOST_TYPE='2'锛岀洿鎺ョ敤 getscript 鏃惰鑷繁琛�
+  (window as any).HOST_TYPE = '2';
   window.BMapGL_loadScriptTime = Date.now();
 
   const query = `type=webgl&v=1.0&ak=${accessKey}&services=&t=${Date.now()}`;
-  // 浼樺厛鍚屽煙鍙嶄唬锛堢粫杩囧鎴风 IPv6 涓嶉�氾級锛屽啀鍥為��鐩磋繛
   const candidates = [
+    // 鏈珯鏀瑰啓鐗堬細鍐呴儴鍩熷悕鍏ㄩ儴鎸囧悜鏈珯浠g悊锛岀摝鐗�/鎺ュ彛閮借蛋 IPv4
+    '/bmap-sdk.js',
+    // 鏈珯浠g悊鐨勫畼鏂� SDK锛堟湭鏀瑰啓锛岀摝鐗囦粛鎸囧悜鐧惧害锛屼粎浣滃厹搴曪級
     `/bmap-api/getscript?${query}`,
+    // 鐩磋繛鐧惧害锛堜粎 IPv6 姝e父鐨勭幆澧冩湁鏁堬級
     `https://api.map.baidu.com/getscript?${query}`,
   ];
 
   loadPromise = (async () => {
-    let lastError: any;
+    const errors: string[] = [];
     for (const url of candidates) {
       try {
         await loadFrom(url, timeout);
         return;
-      } catch (error) {
-        lastError = error;
+      } catch (error: any) {
+        errors.push(error?.message ?? String(error));
       }
     }
     loadPromise = null;
-    throw new Error(
-      `鐧惧害鍦板浘 SDK 鍔犺浇澶辫触锛堝凡灏濊瘯浠g悊涓庣洿杩烇級锛�${lastError?.message ?? ''}`,
-    );
+    throw new Error(`鐧惧害鍦板浘 SDK 鍔犺浇澶辫触锛�${errors.join(' | ')}`);
   })();
 
   return loadPromise;

--
Gitblit v1.9.3