Autor Zpráva
xlifer
Profil
Proč mi nefunguje událost onload na iframe přes createElement ?

var ram = document.createElement("iframe");
ram.src = "neco.html";
ram.onload = function(){nahrano();};
document.body.appendChild(ram);
...
...
Witiko
Profil
xlifer:
Zcela validní kód. Cross-domain problémy by zde neměly vyvstat, protože neposloucháme na window dokumentu uvnitř iframe, ale na samotném iframe. Pokud tedy nedojde ke spuštění nahrano();, dá se předpokládat, že iframe se nenačítá - tzn. neco.html neexistuje. Pokud tomu tak není, bude třeba živá ukázka.
Chamurappi
Profil
Reaguji na Witika:
dá se předpokládat, že iframe se nenačítá
A nebo se už stihl načíst dříve, než nastal třetí řádek, xlifer by si měl pozorněji pročíst své starší vlákno.
xlifer
Profil
Chamurappi:

I když přehodím nejdřív řádek s události pak teprve naplním src, tak to nefunguje taky. Tudíž asi pravděpodoně se načte dříve než stačí událost zareagovat, ale to je přeci špatně a pak je událost k ničemu, protože když chci onload na různé soubory, tak některý může být dřív než stihne událost zareagovat, ale jak tohle řešit?
Witiko
Profil
Chamurappi:
Ze zkušenosti vím, že k započetí načítání obsahu iframe dochází až po jeho vložení do toku dokumentu. Netvrdím, že zde nejsou výjimky, jen jsem se s nimi nesetkal.

xlifer:
Tudíž asi pravděpodoně se načte dříve než stačí událost zareagovat
To je hloupost, chyba bude jinde. Bohužel nejsme věštci a ty 4 řádky kódu nic nevypovídají. Proto Tě (opět) žádám o živou ukázku.
_es
Profil
xlifer:
když přehodím nejdřív řádek s události pak teprve naplním src, tak to nefunguje taky.
Treba to zmeniť takto:
var ram = document.createElement("iframe");
ram.name = "nejakýIdentifikátor";
document.body.appendChild(ram);
frames.nejakýIdentifikátor.onload = nahrano;
ram.src = "neco.html";
Witiko
Profil
_es:
Ne, není to třeba. To by pak připojoval událost přímo na window dokumentu v daném iframe elementu, ke kterému nemusí mít přístup, pokud načítá iframe s cross-domain obsahem. Událost onload přímo na elementu iframe funguje stejně, aniž by na ni byly uvaleny cross-domain restrikce. Tzn. kód z [#1] je sám o sobě zcela funkční a pokud nefunguje, pak bude potřeba předložit živou ukázku.
_es
Profil
xlifer:
Asi bude chyba inde, pre vyriešenie problému dodaj dostatok informácií. Funkciu nahrano máš kde?
xlifer
Profil
Zde uvádím kompletní kód na kterém zkouším.
neco.html je dostupné, protože to se mi zobrazí uvnitř iframu, akorát onload událost neregauje

<html>

<body>

<h1>test</h1>

</body>

<script language="javascript" type="text/javascript">

function nahrano() {
 alert('nahrano');
}

var ram = document.createElement("iframe");
ram.onload = function(){nahrano();};
ram.src = "neco.html";
ram.frameBorder = 0;
ram.scrolling = "no";
ram.width = 640;
ram.height = 480;	
document.body.appendChild(ram);
	
</script>

</html>
_es
Profil
xlifer:
Vyskúšaj dať riadok 17 až za riadok 22.
xlifer
Profil
_es:

Ani, tak to nejede.
Opravdu záhada...
xlifer
Profil
Ale pozor, na zákládě předchozího tipu jsem zkusil takto a jede to!

var ram = document.createElement("iframe");
ram.frameBorder = 0;
ram.scrolling = "no";
ram.width = 640;
ram.height = 480;    
document.body.appendChild(ram);
ram.onload = function(){nahrano();};
ram.src = "neco.html";
_es
Profil
xlifer:
jsem zkusil takto a jede to!
V akom prehliadači prechádzajúce kódy nejdú a tento ide?

Čo tak vyrobiť tú živú ukážku, o ktorú si už bol požiadaný?
xlifer
Profil
_es:

V IE8 a kód je kompletní jak bylo žádáno, akorát není dostupný online, ale to nemá vliv na daný problém, který už je výřešen, díky za nakopnutí s přehozením řádku i když jinak, ale hlavně, že to jede...
Chamurappi
Profil
Reaguji na xlifera:
V IE8 a kód je kompletní jak bylo žádáno
Není. I v osmičce uvedený problematický kód bez potíží jede. (Složitější kód by jet nemusel.)

není dostupný online, ale to nemá vliv na daný problém
Nevíme, co má vliv na problém, nedal jsi nám to k vyzkoušení.
_es
Profil
xlifer:
Áno, v IE je potrebné také poradie príkazov, aj v iných prehliadačoch môže byť rozdiel, či sa nastavujú vlastnosti elementu už vloženému do dokumentu, alebo existujúcemu len mimo dokument.

Chamurappi:
I v osmičce uvedený problematický kód bez potíží jede.
Problematický kód mi v IE8 nejde, tento ide.

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