Когда пользователь нажимает кнопку, мне нужно добавить к своему телу внешний скрипт. Это требование.
Грач ie вопрос. Допустим, внешняя библиотека создает переменную window.newLib. Как я могу получить уведомление, когда переменная newLib готова для использования?
Я пробовал это, но onload не вызывается:
const script = document.createElement('script');
script.innerHTML = 'window.test = 1; console.log("test defined.");';
script.onload = "console.log('onload called.', window.test)"
script.async = false;
document.body.appendChild(script);
Это работает, но мне кажется, что это грязно. Есть ли лучший способ?
const injectScript = () => {
const script = document.createElement('script');
script.innerHTML = 'setTimeout(() => {window.test = 1},10500); console.log("test defined.");';
script.async = false;
document.body.appendChild(script);
}
const nap = ms => new Promise(res => setTimeout(res, ms));
const maxAttempts = 100;
const msNap = 100; // 10s timeout
const start = async () => {
injectScript();
let id = 0;
while (true) {
if (++id === maxAttempts) {
throw(`Lib took too long to load: ${id * msNap}ms`);
}
if (window.test) break;
await nap(msNap);
}
console.log('External lib correctly loaded.');
};
start();