Autor Zpráva
Yuhů
Profil
V externím skriptu, který načítám přes <script async src="example-adresa.js"> mám definovanou funkci ahoj().
Potom z html zavolám skript
<script>
ahoj();
</script>

Jenomže ten externí skript ještě nemusí být stažený, protože je async. Takže ahoj() může být neznámá funkce. Umím to vyřešit tak, že tu funkci navážu na nějakou událost (onload například), jenomže všechny ty události nastanou relativně pozdě. Vlastně bych to chtěl spustit co nejdříve po stažení toho externího skriptu. (Externí skript i jeho volání můžu upravit, ale ne vše z externího přesunout do volání.) Ta funkce má dělat nějakou statistiku, takže bych byl vlastně nerad, kdyby polovička návštěv skončila na neznámé funkci a nic nenaměřila. Jak se tohle prosím řeší?
Kajman
Profil
Tak dej k tomu externímu scriptu onload, co spustí funkci využívající ahoj.

Případně si ukládej data, co chceš měřit, a až v té chvíli je zpětně zaznamenáš.

Také si můžeš udělat svoji dočasnou funkci ahoj, pokud ahoj není definovaná, která si data takto uloží a při onloadu externího skriptu zavolá nově definované ahoj s uloženými parametry.
Yuhů
Profil
Dík. Jakože takhle?

<script onload="ahoj()" async src="example-adresa.js">

<script> má funkční událost onload? Musím zkusit, jestli to funguje. Super nápad. I kdyby to nefungovalo, myslím, že je to ekvivalentní k dopsání ahoj() na konec toho souboru. To by vlastně bylo z větší části řešení. Jenom bych musel upravit pořadí skriptů (potřebuju z HTML dostat nějaké parametry, to jsem pro zjednodušení neuvedl). Ale to by asi šlo.

Té třetí zmíněné možnosti moc nerozumím. Nadefinuju si funkci, spustím ji a pomocí ní budu shromažďovat údaje. Až sem rozumím. Zvládnu pochopit, že ji pak externí skript nadefinuje nově, ale nevím, jak se pak spustí. Zase tím onloadem u skriptu? To už je vlastně trochu zbytečně komplikované.
Kajman
Profil
Ano. A ta třetí možnost byla jen kombinace všeho s tím, že bys pak v kódu nemusel řešit, jestli ahoj už znáš nebo ne. To ukládání dat bych řešil, pokud potřebuješ měřit třeba klikání na stránce i před tím, než se externí skript načte.

Něco takového má google analytics
developers.google.com/analytics/devguides/collection/analyticsjs#alternative_async_tag
můžeš si přidávat do pole události, které chceš měřit a na server se pošlou zpětně, až se měřící skript načte. Jen se tam už ten onload nemusí řešit, on tam už případné pole dat sám očekává.

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:

0