diff options
author | bpeetz <me@b-peetz.de> | 2023-06-26 07:07:28 +0200 |
---|---|---|
committer | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2024-02-22 16:07:05 +0100 |
commit | c4276f597be72da754cd0595dffee17454556c49 (patch) | |
tree | b6160a73a1c0b752d875fc356f1e06dcdf7503a0 /geschichte/js/utils/loader.js | |
parent | chore: Initial Commit (diff) | |
download | b-peetz.de-c4276f597be72da754cd0595dffee17454556c49.zip |
feat(geschichte): Add
Diffstat (limited to 'geschichte/js/utils/loader.js')
-rw-r--r-- | geschichte/js/utils/loader.js | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/geschichte/js/utils/loader.js b/geschichte/js/utils/loader.js new file mode 100644 index 0000000..58d39ac --- /dev/null +++ b/geschichte/js/utils/loader.js @@ -0,0 +1,46 @@ +/** + * Loads a JavaScript file from the given URL and executes it. + * + * @param {string} url Address of the .js file to load + * @param {function} callback Method to invoke when the script + * has loaded and executed + */ +export const loadScript = ( url, callback ) => { + + const script = document.createElement( 'script' ); + script.type = 'text/javascript'; + script.async = false; + script.defer = false; + script.src = url; + + if( typeof callback === 'function' ) { + + // Success callback + script.onload = script.onreadystatechange = event => { + if( event.type === 'load' || /loaded|complete/.test( script.readyState ) ) { + + // Kill event listeners + script.onload = script.onreadystatechange = script.onerror = null; + + callback(); + + } + }; + + // Error callback + script.onerror = err => { + + // Kill event listeners + script.onload = script.onreadystatechange = script.onerror = null; + + callback( new Error( 'Failed loading script: ' + script.src + '\n' + err ) ); + + }; + + } + + // Append the script at the end of <head> + const head = document.querySelector( 'head' ); + head.insertBefore( script, head.lastChild ); + +} \ No newline at end of file |