@@ -160,21 +160,24 @@ const apis = {
160160 ) {
161161 // process xhr response
162162 const r = msg . response ;
163- if ( r . responseType === "arraybuffer" ) {
164- // arraybuffer responses had their data converted in background
165- // convert it back to arraybuffer
166- try {
167- const buffer = new Uint8Array ( r . response ) . buffer ;
168- r . response = buffer ;
169- } catch ( err ) {
170- console . error ( "error parsing xhr arraybuffer" , err ) ;
163+ // only process when xhr is complete and data exist
164+ if ( r . readyState === 4 && r . response !== null ) {
165+ if ( r . responseType === "arraybuffer" ) {
166+ // arraybuffer responses had their data converted in background
167+ // convert it back to arraybuffer
168+ try {
169+ const buffer = new Uint8Array ( r . response ) . buffer ;
170+ r . response = buffer ;
171+ } catch ( err ) {
172+ console . error ( "error parsing xhr arraybuffer" , err ) ;
173+ }
174+ } else if ( r . responseType === "blob" && r . response . data ) {
175+ // blob responses had their data converted in background
176+ // convert it back to blob
177+ const resp = await fetch ( r . response . data ) ;
178+ const b = await resp . blob ( ) ;
179+ r . response = b ;
171180 }
172- } else if ( r . responseType === "blob" && r . response . data ) {
173- // blob responses had their data converted in background
174- // convert it back to blob
175- const resp = await fetch ( r . response . data ) ;
176- const b = await resp . blob ( ) ;
177- r . response = b ;
178181 }
179182 // call userscript method
180183 details [ msg . name ] ( msg . response ) ;
0 commit comments