Autor Zpráva
Vašek knihař
Profil
Zdravím, nevím si rady s asynchroním načtením Javascriptu. Po načtení stránky načítám externí JS soubor, to funguje bez problému. Jenže se zpracuje úplně jako poslední, a já bych potřeboval potom provést kód ve zdrojovém souboru (na místě ZPRACUJ KOD). Jde to nějak? Problém je, že nemohu externí JS měnit. Mě napadá jen příkazy ze ZPRACUJ KOD dát do dalšího externího souboru.

Zdroj kostry kódu, asynchronní načtení JS

<script type="text/javascript">
 // Add a script element as a child of the body
 function downloadJSAtOnload() { // deklarace fce
 var element = document.createElement("script"); //vytvor element (tag) script
element.type = "text/javascript"; //typ scriptu, nepovine
 element.src = "deferredfunctions.js"; // do elementu (mezi tagy) vloz obsah souboru
 document.body.appendChild(element); // narvy cely element do body
 ZPRACUJ KOD Z  deferredfunctions.js    // <- Dalsi prikazy tady se provedou uz pred nactenim souboru, kdy nejsou deklarovane!!!
 }                
                
 // Check for browser support of event handling capability
 if (window.addEventListener) //pokud je list udalosti
 window.addEventListener("load", downloadJSAtOnload, false); //az nastane udalost v listu udalosti: load, volej
 else if (window.attachEvent)
 window.attachEvent("onload", downloadJSAtOnload);
 else window.onload = downloadJSAtOnload;

</script>
preca1
Profil
Zdravim,
na script elementu můžeš odchytávat událost load. Viz ukázka.
index.html:
.<script>//tecka vytvori body
console.log("existuje funkce a?", !!window.a);
var element = document.createElement("script");
element.src = "js.js";
element.onload = function() {
  console.log("existuje funkce a?", !!window.a);
}
document.body.appendChild(element);

console.log("existuje funkce a?", !!window.a);
</script>
js.js
function a() {}
Chamurappi
Profil
Reaguji na precu1:
Ve starším Exploreru se na elementu <script> nevyvolává onload, ale onreadystatechange.


Reaguji na Vaška knihaře:
Problém je, že nemohu externí JS měnit.
A co v něm přesně je? Třeba by se dalo něco zevnitř využít.
preca1
Profil
Chamurappi:
Zajímavý, dík. Postihuje to IE<9. A ještě k tomu je zřejmě potřeba kontrolovat, v jakym stavu je ona změna.
_es
Profil
Vašek knihař:
Akosi nechápem, aký má ten konkrétny kód praktický zmysel.
Prečo nedáš jednoducho, s rovnakým účinkom, na koniec HTML kódu:
<script src="deferredfunctions.js"></script>
<script>Tu budú príkazy, ktoré sa vykonajú až po načítaní deferredfunctions.js.</script>
Vašek knihař
Profil
Chamurappi:
Jedná se o seznam mapy, http://api4.mapy.cz/view?page=instruction

_es:
Protože stránka je skládaná ze šablon, chtěl jsem použít jednoduchý kód abych nemusel řešit, která se zrovna načítá. Bohužel to nefunguje
_es
Profil
Vašek knihař:
Protože stránka je skládaná ze šablon
Čo to má s tým spoločné? Ak ide vložiť kód z [#1], prečo by nemal ísť vložiť kód z [#5]?

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: