|
@@ -69,6 +69,10 @@ class FileLoader extends Loader {
|
|
|
// An abort controller could be added within a future PR
|
|
|
} );
|
|
|
|
|
|
+ // record states ( avoid data race )
|
|
|
+ const mimeType = this.mimeType;
|
|
|
+ const responseType = this.responseType;
|
|
|
+
|
|
|
// start the fetch
|
|
|
fetch( req )
|
|
|
.then( response => {
|
|
@@ -147,7 +151,7 @@ class FileLoader extends Loader {
|
|
|
} )
|
|
|
.then( response => {
|
|
|
|
|
|
- switch ( this.responseType ) {
|
|
|
+ switch ( responseType ) {
|
|
|
|
|
|
case 'arraybuffer':
|
|
|
|
|
@@ -163,7 +167,7 @@ class FileLoader extends Loader {
|
|
|
.then( text => {
|
|
|
|
|
|
const parser = new DOMParser();
|
|
|
- return parser.parseFromString( text, this.mimeType );
|
|
|
+ return parser.parseFromString( text, mimeType );
|
|
|
|
|
|
} );
|
|
|
|
|
@@ -173,7 +177,20 @@ class FileLoader extends Loader {
|
|
|
|
|
|
default:
|
|
|
|
|
|
- return response.text();
|
|
|
+ if ( mimeType === undefined ) {
|
|
|
+
|
|
|
+ return response.text();
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ // sniff encoding
|
|
|
+ const re = /charset="?([^;"\s]*)"?/i;
|
|
|
+ const exec = re.exec( mimeType );
|
|
|
+ const label = exec && exec[ 1 ] ? exec[ 1 ].toLowerCase() : undefined;
|
|
|
+ const decoder = new TextDecoder( label );
|
|
|
+ return response.arrayBuffer().then( ab => decoder.decode( ab ) );
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|