2020-03-07 18:48:39 +01:00
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
*/
|
2023-05-23 19:50:14 +02:00
|
|
|
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);
|
|
|
|
};
|