/** * 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 const head = document.querySelector( 'head' ); head.insertBefore( script, head.lastChild ); }