Autor | Zpráva | ||
---|---|---|---|
suvel Profil |
Prosím o radu: Pomocí createElement vytvořím iframe a další příkazy ve scriptu chci provádět až v okamžiku, kdy se načte, až skript neco.php vytvoří div s name="test":
var ram = document.createElement("iframe"); ram.src = "neco.php"; ram.name = "novy"; ram.frameBorder = 1; ram.width = 100; ram.height = 100; document.body.appendChild(ram); do { } while(typeof window.frames[0].document.getElementsByName("test")[0] == "undefined") ... další příkazy Jenže cyklus se neukončí. 1) Proč? 2) Jak jinak to vyřešit? |
||
suvel Profil |
#2 · Zasláno: 2. 3. 2015, 00:22:13
Už jsem na to přišel:
document.getElementsByName("novy")[0].onload
Jak prosté :-( |
||
Chamurappi Profil |
#3 · Zasláno: 2. 3. 2015, 00:59:50
Reaguji na suvela:
„ document.getElementsByName("novy")[0] “
Proč ho vyhledáváš? Vždyť ho máš v ram , ne?
„Jenže cyklus se neukončí.“ Skript v jiném okně nemá šanci se spustit, celou dobu běží ta tvá smyčka. „ document.getElementsByName("test")[0] “
Mimochodem, document.getElementsByName je metoda, která se používá buď zbytečně (kdy hledá něco, co už je někde připravené), nebo nespolehlivě (kdy hledá něco, co v části prohlížečů nenajde). Do které skupiny patří toto tvé použití?
|
||
suvel Profil |
Děkuju. Protože jsem měl zatemnění a testoval jsem, zda už byl element name="test" vytvořen. Takže:
var ram = document.createElement("iframe"); ram.src = "neco.php"; ram.name = "novy"; ram.frameBorder = 1; ram.width = 100; ram.height = 100; document.body.appendChild(ram); document.getElementsByName("novy")[0].onload = funkce; Ale: Mozila, Chrome (včetně Chrome pod Androidem) i Opera v pohodě, zatímco IE8 funkci funkce nenačte, jako by nereagoval na onload... Co s tím?
Edit: A v IE to nejede, ani když se neptam na onload podle jmena, ale podle Id: ram.id = "novy"; ... document.getElementById("novy").onload = funkce; |
||
Chamurappi Profil |
#5 · Zasláno: 2. 3. 2015, 08:18:31
Reaguji na suvela:
Ptám se znovu – proč hledáš element, který už máš v proměnné ram ?
„zatímco IE8 funkci funkce nenačte, jako by nereagoval na onload“
Stránka už teoreticky může být načtená dřív, než onload nastavíš. Nikdy nenastavuj src dřív než onload .
|
||
suvel Profil |
var ram = document.createElement("iframe"); ram.name = "novy"; ram.frameBorder = 1; ram.width = 100; ram.height = 100; document.body.appendChild(ram); document.getElementsByName("novy")[0].onload = funkce; ram.src = "neco.php"; Stejné, jde to, jen ne v IE. Element používám, abych na něm odchytnul událost onload. Nebo to jde jinak? Prosím o nakopnutí... Edit: Omlouvám se: ram.onload (ale to by mělo být totéž, ne?). Ale bohužel taky stejný výsledek.
|
||
Bronco Profil * |
#7 · Zasláno: 2. 3. 2015, 10:41:04
if ("attachEvent" in ram) { ram.attachEvent("onload", funkce); } else { ram.onload = funkce; } ram.src = "neco.php"; document.body.appendChild(ram); |
||
_es Profil |
#8 · Zasláno: 2. 3. 2015, 12:15:02
|
||
suvel Profil |
#9 · Zasláno: 2. 3. 2015, 13:20:49
_es:
Díky, vyzkouším, teď jsem bohužel u jiného počítače na kterém je IE11 a v něm původní script funguje. A nebo to možná vůbec nebudu řešit, IE mi leze na nervy a IE8 už stejně moc lidí asi nemá. Čo je vo funkcii funkce? function funkce() { alert ("ahoj, jsem tady"); } |
||
Časová prodleva: 9 let
|
0