@@ -115,42 +115,51 @@ interface LoadScriptOptions {
115115}
116116
117117export const loadScript = ( url : string , options : LoadScriptOptions = { } ) : Promise < void > => {
118- const { jsId, forceReload = false } = options
119- const scriptId = jsId || `script-${ btoa ( url ) . slice ( 0 , 12 ) } ` // 生成唯一 ID
118+ const { jsId, forceReload = false } = options ;
119+ const scriptId = jsId || `script-${ btoa ( url ) . slice ( 0 , 12 ) } ` ;
120+
121+ const cleanupScript = ( script : HTMLScriptElement ) => {
122+ if ( script && script . parentElement ) {
123+ script . parentElement . removeChild ( script ) ;
124+ }
125+ } ;
120126
121127 return new Promise ( ( resolve , reject ) => {
122- // 检查是否已存在且无需强制加载
123- const existingScript = document . getElementById ( scriptId ) as HTMLScriptElement | null
128+ if ( typeof document === 'undefined' ) {
129+ reject ( new Error ( 'Cannot load script in non-browser environment' ) ) ;
130+ return ;
131+ }
132+
133+ const existingScript = document . getElementById ( scriptId ) as HTMLScriptElement | null ;
134+
124135 if ( existingScript && ! forceReload ) {
125136 if ( existingScript . src === url ) {
126- existingScript . onload = ( ) => resolve ( ) // 复用现有脚本
127- return
137+ console . log ( `[loadScript] Reuse existing script: ${ url } ` ) ;
138+ resolve ( ) ;
139+ return ;
128140 }
129- // URL 不同则移除旧脚本
130- existingScript . parentElement ?. removeChild ( existingScript )
141+ existingScript . remove ( ) ;
131142 }
132143
133- // 创建新脚本
134- const script = document . createElement ( 'script' )
135- script . id = scriptId
136- script . src = url
137- script . async = true // 明确启用异步加载
144+ const script = document . createElement ( 'script' ) ;
145+ script . id = scriptId ;
146+ script . src = url ;
147+ script . async = true ;
138148
139- // 成功回调
140149 script . onload = ( ) => {
141- resolve ( )
142- }
150+ console . log ( `[loadScript] Script loaded: ${ url } ` ) ;
151+ resolve ( ) ;
152+ } ;
143153
144- // 错误处理(兼容性增强)
145154 script . onerror = ( ) => {
146- reject ( new Error ( ` Failed to load script : ${ url } `) )
147- cleanupScript ( script )
148- }
149-
150- // 插入到 <head> 确保加载顺序
151- document . head . appendChild ( script )
152- } )
153- }
155+ console . error ( `[loadScript] Failed to load: ${ url } `) ;
156+ cleanupScript ( script ) ;
157+ reject ( new Error ( `Failed to load script: ${ url } ` ) ) ;
158+ } ;
159+
160+ document . head . appendChild ( script ) ;
161+ } ) ;
162+ } ;
154163
155164// 清理脚本(可选)
156165const cleanupScript = ( script : HTMLScriptElement ) => {
0 commit comments