Autor | Zpráva | ||
---|---|---|---|
regvac Profil * |
#1 · Zasláno: 24. 10. 2013, 08:40:53
Ahoj,
pokouším se najít globální řešení k testování existence objektů, funkcí a proměnných. Stránku mám složenou s iframů a některé mají další iframy v sobě. Z různých úrovní iframů potřebuji spouštět funkce z jiných iframů. Problém je, že se některé obsahy iframů načítají déle a funkce, které spouštím ještě nejsou zcela načteny nebo ani nejsou v daném iframu(stránce) definovány. Proto musím kontrolovat postupně celou hierarchii iframů a dostupnost funkcí(proměnných,tagů,atd) v nich. např: if (window.top.iframe1 && window.top.iframe1.iframe12 && window.top.iframe1.iframe12.document.getElementById('existuje')) {window.top.iframe1.iframe12.document.getElementById('existuje').innerHTML='existuje';} Proto jsem zkusil toto: Při zpuštění se provede kontrola existence postupně celé hierarchie (window.top.iframe1.iframe12.document.getElementById('existuje')) a pokud existují všechny její části, tak true a script (window.top.iframe1.iframe12.document.getElementById('existuje').innerHTML='existuje';) proběhne. function exists(target) { var pole = target.split('.'); var object = ''; var object_name = ''; for (var i = 0; i < pole.length; i++) { if (i == 0) {object_name = pole[i];} else {object_name = object_name+'.'+pole[i];} object = window[object_name]; if (!object) {return false;} //chyba asi zde } return true; } Bohužel to nefunguje, jak to upravit, má-li to řešení:-( |
||
Chamurappi Profil |
#2 · Zasláno: 24. 10. 2013, 10:19:27
Reaguji na regvace:
Zápisy objekt.xyz a objekt["xyz"] sice fungují stejně, ale objekt.xyz.abc už samozřejmě nefunguje stejně, jako objekt["xyz.abc"] . Takže jakési slepování object_name je nesmyslné…
Musíš tu hierarchii procházet postupně, window bude rodič jen při prvním průchodu.
|
||
regvac Profil * |
#3 · Zasláno: 24. 10. 2013, 10:35:44 · Upravil/a: regvac
A jak z hodnoty v poly, např. pole[0]='window';pole[1]='top';pole[2]='iframe1'; sloučit, vytvořit z nich objekt k posouzení jeho existence window.top.iframe1?
Co takto? Zdá se, že mi to funguje, ale nemůže v tom být nějaký problém? function exists(target) { var pole = target.split('.'); var object = ''; var object_name = ''; for (var i = 0; i < pole.length; i++) { if (i == 0) {object_name = pole[i];} else {object_name = object_name+'.'+pole[i];} object = eval(object_name); if (!object) {return false;} } return true; } |
||
Radek9 Profil |
regvac:
Eval ne, prosím tě. function exists(target) { var obj = window; target = target.split("."); for (var i = 0; i < target.length; ++i) { obj = obj[target[i]]; if (obj === undefined) { return false; } } return true; }; |
||
Časová prodleva: 10 let
|
0