Autor Zpráva
mol
Profil *
Ahoj, mám stránku čistě v html a tam
document.addEventListener('DOMContentLoaded', fceRDOM);
funguje bezproblému,
ale ted když jsem to přendal do php a spustil přes xampp tak se to vůbec nezavolá, ale ostatní jako např scroll nebo onload se zavolají. Čím by to mohlo být?


tady jsme snad našel odpověď, ale zajímalo by mě proč to v čistě napsaném html funguje bez problemu a když to spouštím přes xampp tak to nejde.
Object moved


namísto async jsem napsal defer a ted se to spustí, ale špatně to počítá šířku divů - jako kdyby to nemělo z css nastavenou nebo propočítanou šířku a bere to jako 100% width blok.
A když dám před body byt jen prázdný
<script>
</script>
tak to funguje


netušíte čím by to mohlo být?


*když dám před </body> (ukončovací body, předtim sem to napsal špatně)


když ten script mám jako async a na poslední řádek v tom skriptu napíš
if ( document.readyState === "complete") {
    setTimeout(fceRDOM, 1);
}
tak se to stejnak nezavolá
mol
Profil *
a některý elementy vypočítává s nulovou velikostí i když je tma text.


vubec nechápu čím by to mohlo být
mol
Profil *
Tady je napsáno že js čeká na načtení stylesheet. Jak to že tedy JavaScript spočítá že některé prvky mají 100 procentní šířku a u jiných nulovou když je v nich navíc text? Nedaří se mi sem skopírovat odkaz na ten článek ale to na věci nic nemění.
RastyAmateur
Profil
To my nevíme, páč nevidíme kód. Každopádně se mi nechce věřit, že když stránku pustíš přes xamp, že ti funguje javascipt jinak...
mikulas12
Profil
Chtělo by to kod
mol
Profil *
RastyAmateur:
Tu stránku vygenerovanou přez xampp jsem uložil jako a spustil bez xampu a blbne to. Za chvilku sem dám kod
RastyAmateur
Profil
mol:
Proboha a proč ji ukládáš?
mol
Profil *
tak tady to je... sou tam tři složky včetně puvodního navrhu kterej funguje
files.uloziste.com/20efcdc7cba4176e
RastyAmateur
Profil
mol:
Ta funkce se na DOMContentLoaded vůbec nezavolá. Nevím proč, každopádně stále nechápu, proč ukládáš vygenerované PHP stránky. Normálně na serveru (když si to pustíš na localu) to funguje, ne?
mol
Profil *
Ale0

RastyAmateur:
Normálně na serveru (když si to pustíš na localu) to funguje, ne?
Právě že nefunguje. Proto jsem to taky uložil aby jste mi řekli co tam mám špatně.


když odeberu to async a defer, tak ten contentloaded nemůže nastat dříve.. .odebral jsem to a ted se to zavolá, ale když to počítá šířku <a> položek menu tak to bere jako 0px. Zkoušel jsem to 10x znovu načíst a jen párkrát se to povede tak jak má. netuším čím to je


snad se najde někdo kdo tomu rozumí
mol
Profil *
zkoušel jsem to s jquery a ready funkcí a bezvýsledně (až an to že ten jquery ready se zavolá jak má)... zkouším to snad desetkrát a 6x to vypočítá že logo a vyhledávač má plnou šířku 1887px a jednotlivé položky menu mají každá 0px... 4x z deseti to změří správně... nechápu čím by to mohlo být.


když nastane domcontentloaded tak by měl mít dom všechny ty prvky - tj rozměry, šířka, výška vypočítané, nebo snad ne? (kromě obrázků který by se mohli stahovat, ale když mám jen <a href="#">Položka menu</a> tak by to snad mělo být spočítané, a ne že se mi vrátí 0 velikost.
RastyAmateur
Profil
mol:
Já se ale obávám, že ona se ta funkce vůbec nevykoná, ne že přiřadí hodnotu 0.

DOMContentLoaded
The DOMContentLoaded event is fired when the initial HTML document has been completely loaded and parsed, without waiting for stylesheets, images, and subframes to finish loading. A very different event load should be used only to detect a fully-loaded page.
mol
Profil *
RastyAmateur:
The DOMContentLoaded event is fired when the initial HTML document has been completely loaded and parsed, without waiting for stylesheets, images, and subframes to finish loading. A very different event load should be used only to detect a fully-loaded page.
ale houby, já přece viděl příklad kde ukazovali že to čeká na stylesheety
javascript.info/onload-ondomcontentloaded#domcontentloaded-and-styles
Jestli jsem tohle správně přečetl tak to čeká na stylesheety... ta domloaded se nespustí, ale když to dám do ready funkce jquwery tak už se to spustí jak má akorát to počítá že ty prvky mají 0 šířku a někdy to spočítá správnou šířku. navíc to teoreticky ani nepotřebuje žádný stylesheet protože ext sám o sobě musí mít přece šířku.
Keeehi
Profil
mol:
Jestli jsem tohle správně přečetl tak to čeká na stylesheety
Na začátku se píše, že na styly nečeká, na konci že čeká. Ono je to ovlivněno pořadím stylů a scriptu v dokumentu. Tvoji ukázku si teď stáhnout nemohu, takže nevím, jaký je zrovna tvůj případ.
Ale pokud se do toho přidá ještě async, může to být úplně jinak jelikož async scripty se vykonávají nezávisle na stránce. Tudíž ani ten HTML dokument nemusí být zatím celý naparsovaný.
mol
Profil *
Keeehi:
Ono je to ovlivněno pořadím stylů a scriptu v dokumentu.
Já měl nahoře script a až pod tím styly... takže když dám nahoru styly a dolů script tak by to mělo čekat, je to tak?


ted sem to zkoušel snad 30x a vypočítalo to dobře, takže tohle už snad mám za sebou.... sakra takovýhle malý chyby a já u toho strávím skoro celej den....

ale pořád nechápu proč se nezavola ten contentloaded
Keeehi
Profil
mol:
Pokud nemá async tak ano. Pokud ho má, je to složitější. Tato stránka není úplně nějvěrohodnější zdroj informací ale teď to snad bude stačit. Je tam napsáno, jak async a defer ovlivňují čas spuštění. A tady v češtině Připojení JavaScriptu s async a defer
mol
Profil *
Keeehi:
hm, vím jak vypadá async a defer ale nenapadlo mě že by se to mohlo načíst později až skončí DOMcontentloaded,... spíš sem čekal že by se to spustilo i tak... ale když se podívám na tohle
tak by ten defer měl stačit.... ale i tak jak by se to řešilo kdybych tam měl async?


ale co když se ten js soubor ještě nestáhne a on už by měl probíhat contetload... tak bude čekat než se to stáhne doufám....


ufffffffffffffffffffffffff.... no teda..... to mi dalo zabrat... děkuju všem za pomoc....
mol
Profil *
Ale pořád bych chtěl vědět jak to udělat s async

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: