Здравствуйте.
Сам код рабочий, но я не знаю как определить загрузился ли url-скрипт или нет.
Мне нужно написать условие для функции loadScriptBody, в котором если созданный скрипт еще не прогрузился, то ждать до полной загрузки. Но если скрипт до этого был создан, то сразу запускаем функцию c.callback();.
Тут я не знаю как определить готовность скрипта.
Сам код:
const arrayToUrlParams = (url, array) => {
let start = true;
for (let [NAME,VALUE] of Object.entries(array)) {
if(VALUE != null){
if(start){
url += `?${NAME}=${VALUE}`;
}else{
url += `&${NAME}=${VALUE}`;
}
start = false;
}
}
return url;
};
const isScript = (url) => {
let scripts = document.getElementsByTagName('script');
for(let i = scripts.length; i--;) if(scripts[i].src == url) return scripts[i];
return false;
};
const loadScriptBody = (c) => {
let url = (c.params)?arrayToUrlParams(c.url,c.params):c.url;
if(script = isScript(url)){
//В этом месте нужно определить загруженность url-скрипта.
//Если скрип еще не загрузился, то ждём:
script.addEventListener("load", () => {
c.callback();
}, false);
//Но если скрипт загрузился, то сразу запускаем функцию:
//c.callback();
}else{
let script = document.createElement('script');
script.src = url;
script.addEventListener("load", c.callback, false);
if(c.attributes && c.attributes.length>0){
for(let i = 0; i < c.attributes.length; i++){
script.setAttribute(c.attributes[i].name,c.attributes[i].value);
}
}
document.getElementsByTagName('head')[0].appendChild(script);
}
};
const mapYandex = () => {
};
loadScriptBody({
url:'https://api-maps.yandex.ru/2.1/',
params:{
apikey:apikey,
lang:'ru_RU'
},
callback:mapYandex
});
В этом месте нужно определить загруженность url-скрипта:
if(script = isScript(url)){
//Если скрип еще не загрузился, то ждём:
script.addEventListener("load", () => {
c.callback();
}, false);
//Но если скрипт загрузился, то сразу запускаем функцию:
//c.callback();
}
Посоветуйте пожалуйста как определить utl-скрипт загружен или нет.