21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
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
Už jsem na to přišel: document.getElementsByName("novy")[0].onload
Jak prosté :-(
Chamurappi
Profil
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
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 *
if ("attachEvent" in ram) {
  ram.attachEvent("onload", funkce);
} else {
  ram.onload = funkce;
}
ram.src = "neco.php";
document.body.appendChild(ram);
_es
Profil
[#6] suvel:
Viď (znovu) prvý odsek v [#5] Chamurappi - možno aj metóda document.getElementsByName nefunguje spoľahlivo. V [#6] môžeš ešte skúsiť dať 6. riadok nižšie. Alebo dať onload nie elementu iframe, ale dokumentu vo vnútri: frames.novy.onload=funkce;. Čo je vo funkcii funkce?
suvel
Profil
_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");
}
:-))

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