Purtroppo uso js una volta ogni tre anni (solo per qualche esigenza particolare) e mi dispiace perchè non sono per nulla pratico.
Il debug passo passo non ho idea di come si faccia, e con quali strumenti, non lo so
Se può aiutare
codice:
$ cat window-resources.js
function open_window_resources() {
setTimeout(() => {
console.log('aaa')
}, 0);
const searchParams = new URLSearchParams(window.location.search);
var script = document.createElement("script");
var
day = searchParams.has('day') ? searchParams.get('day') : new Date().getDate(),
day2Digits = String(day).padStart(2, "0")
;
script.src = "resources/" + searchParams.get("config_filename") + ".js";
script.type = "text/javascript";
script.async = false;
document.head.appendChild(script);
setTimeout(() => {
console.log('ccc')
}, 0);
url_templates.forEach(
function (template) {
var url = template
.replace("%1", day)
.replace("%2", day2Digits)
;
window.open(url);
}
);
}
$ cat resources/example.js
var url_templates = new Array(
"URL1",
"URL2",
"URL3",
);
setTimeout(() => {
console.log('bbb')
}, 0);
In console
codice:
Uncaught ReferenceError: url_templates is not defined
at open_window_resources (window-resources.js:22:5)
at onload (index.html?config_filename=example:5:40)
open_window_resources @ window-resources.js:22
onload @ index.html?config_filename=example:5
window-resources.js:3 aaa
window-resources.js:19 ccc
example.js:7 bbb
Da cui intuisco che ccc viene eseguito prima di bbb
Perchè?
A mio avviso, la cosa non può funzionare così, perché quando tu crei l'elemento dello script all'interno della funzione start(), la funzione termina prima che il browser passi ad eseguire ciò che c'è all'interno dello script.
Perchè?
Non si può spezzare una funzione *non* asincrona in due parti.
Il tuo log di "xxx" arriva evidentemente prima dell'esecuzione dello script config.js.
Perchè?