| 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: 13 let
|
|||
0