you can return a promise to chain calls
export class HomeComponent {
constructor() {
this.loadDynmicallyScript()
.then(() => {
this.doSomethingWhenScriptIsLoaded();
});
}
public loadDynmicallyScript():Promise {
var script = document.createElement('script');
script.src = "../node_modules/xxxxxx/i18n/xx.min.js";
script.async =false;
document.head.appendChild(script);
return Promise((resolve, reject) => {
script.onload = resolve;
});
}
or just pass a function to the onLoad
to be called when the script was loaded
export class HomeComponent {
constructor() {
this.loadDynmicallyScript()
}
public loadDynmicallyScript():Promise {
var script = document.createElement('script');
script.src = "../node_modules/xxxxxx/i18n/xx.min.js";
script.async =false;
document.head.appendChild(script);
script.onload = () => this.doSomethingWhenScriptIsLoaded();
}
Another one
loadAPI: Promise<any>;
constructor() {
this.loadAPI = new Promise((resolve) => {
this.loadScript();
resolve(true);
});
}
public loadScript() {
var isFound = false;
var scripts = document.getElementsByTagName("script")
for (var i = 0; i < scripts.length; ++i) {
if (scripts[i].getAttribute('src') != null && scripts[i].getAttribute('src').includes("loader")) {
isFound = true;
}
}
if (!isFound) {
var dynamicScripts = ["https://widgets.skyscanner.net/widget-server/js/loader.js"];
for (var i = 0; i < dynamicScripts.length; i++) {
let node = document.createElement('script');
node.src = dynamicScripts [i];
node.type = 'text/javascript';
node.async = false;
node.charset = 'utf-8';
document.getElementsByTagName('head')[0].appendChild(node);
}
}
}
Comments
Post a Comment