Autor Zpráva
peta
Profil
Hraju si trosku s objecty a iframe vypisovanymi pomoci js. Narazil jsem na takovou neprijemnou vec pri prepnuti IE9 na rezim IE7. Kdyz vykreslim do stranky pomoci innerHTML object a v nem spustim script pro zobrazeni window.location, tak iframe zobrazi spravne src framu, object zobrazi chybne adresu hlavni stranky.

Kod hlavni stranky;
    <div class="banner_wz_js">
    </div><!--//banner_wz-->

    <div class="nav_path_js">
    </div><!--//nav_pathbar-->

    <div class="nav_main_js">
    </div><!--//nav_main-->
<script>
function writeObject(id,str)
{
document.getElementById(id).innerHTML = str;
}

    writeObject('nav_path_js',  '<iframe name="navpath"    src="'+home+'site_map.htm?run=navpath&url='+urlEncode(url)+'"></iframe>');
    writeObject('nav_main_js'   ,'<iframe name="navmain"    src="'+home+'site_map.htm?run=navmain&url='+urlEncode(url)+'"></iframe>');
    writeObject('site_footer_js','<iframe name="sitefooter" src="'+home+'site_footer.htm"     ></iframe>');
//    writeObject('nav_path_js'   ,'<object name="navpath"    data="'+home+'site_map.htm?run=navpath&url='+urlEncode(url)+'" ></object>');
//    writeObject('nav_main_js'   ,'<object name="navmain"    data="'+home+'site_map.htm?run=navmain&url='+urlEncode(url)+'" ></object>');
//    writeObject('site_footer_js','<object name="sitefooter" data="'+home+'site_footer.htm"     ></object>');
</script>
[pre]

script v kazde strance:
[pre]<script>alert(window.location.href)</script>

Problem nastava v okamziku, kdy chci uvnitr objektu nacist get parametry "run" a "url". Da se to nejak obejit, precist si skutecnou adresu objektu?

Pro iframe mi alert na kazde strance vypise:
http://localhost/p35/index.htm
http://localhost/p35/site_map.htm?run=navpath&url=http://localhost/p35/index.htm
http://localhost/p35/site_map.htm?run=navmain&url=http://localhost/p35/index.htm
http://localhost/p35/site_footer.htm
Pro object pak
http://localhost/p35/index.htm
http://localhost/p35/index.htm
http://localhost/p35/index.htm
http://localhost/p35/index.htm
_es
Profil
peta:
precist si skutecnou adresu objektu?
No a prečo nečítaš normálne objekt.data? Alebo možno stačí výraz zmeniť na location.href alebo this.location.href.
peta
Profil
Aha. Vysvetlim.
Program dela to, ze do stranky nacte objekty (nebo iframe). Ty objekty pak rsi drobeckovou navigaci, hlavni navigaci, paticku. Cili, neco jako include v php.
Jenze, kdyz chci zjistit pathbar, potrebuji mit k tomu adresu z hlavni stranky. Coz by nebyl v obou pripadech problem.
Ale, kdyz chci mit jeden script.js, potrebuji vedet, ze se prave nachazim v objektu navpath a ne navmain. Takze do data predavam nazev objektu a url adresu hlavni stranky.

A problem je, ze cely ten script krasne funguje ve FF, IE8, IE9, ale ne IE7. V IE7 se to chova tak, ze mi script spusteny uvnitr kazde stranky vrati shodnou adresu. Jak ted tedy zjistim, ve kterem objektu jsem?
A druhy problem je, ze kdyz objekt prepisi na iframe, tak se to chova spravne i v IE7. Jenze jsem si rikal, kdyz vsichni tolik iframe jen kritizuji, ze to prepisi na univerzalnejsi object.

Ps. Nej legrace je pak, kdyz to spoustim pres file:/// v IE7. To mi pak vyskakuji cyklicky hlasky o povoleni JS do nekonecna. Mozna to s tim nejak souvisi. Vlastne urcite, protoze tam mam podminku, ze kdyz nenajde ty 2 parametry, tak ma do stranky vepsat ty objekty. Takze to do navigace napise opet navigaci.... To spravim.
Chamurappi
Profil
Reaguji na peta:
Je to zajímavý poznatek, ale asi zbytečný a nepříliš využitelný. Proč by někdo měl používat <object> místo rámce?
_es
Profil
peta:
kdyz vsichni tolik iframe jen kritizuji, ze to prepisi na univerzalnejsi object.
Univerzálnejší v čom? Hentaká náhrada iframe bude v prehliadačoch asi menej podporovaná a aj tam bude asi viacej problémov. Zmena výrazu nepomohla?
peta
Profil
_es: this.location - nepomohlo
Mno, na objektu jdou vyvolavat ruzne akce, ktere se nad iframem nedaji. a tez stylovani tagu je jednodussi, kdyz nemusis odbouravat ruzne ramecky pro IE ne zrovna validnim kodem. Ale pro muj pokus to nema vyznam. Kdyz na nic neprijdu, dam tam ramy.
Chamurappi
Profil
Reaguji na peta:
na objektu jdou vyvolavat ruzne akce, ktere se nad iframem nedaji
Nějaký příklad? Mně přijde, že rámce mají mnohem propracovanější API (mají contentWindow, vnitřní stránka vidí window.frameElement).

kdyz nemusis odbouravat ruzne ramecky pro IE ne zrovna validnim kodem
Je to jeden rámeček, vypíná se frameborderem a i kdyby to validní nebylo, co na tom záleží…
peta
Profil
Mam to, mocny strejda google :)
url = self.location.href
http://axpsu.fpf.slu.cz/~web/x/p35x/
A kdyz poklikas na x a pak odkaz yyy, tak se nahore zmeni navigace. A vsechno je to zalozene na souboru site_map. Na volny.cz totiz nemam php a vzhledem problemum s navigaci na jinem webu, kde sice php jede, ale neresil jsem to, jsem se rozhodl zkusit prave toto.

Chamurappi: Mno, objekty se chovaji podobne jako ajaxove scripty. Ovladani je pak spolecne. Iframy to maji pojmenovane vsechno jinak. Ano, iframy jsou propracovanejsi a v tomhle spolehlivejsi v ruznych prohlizecich. Ale, to bych nebyl ja, abych nezkusil tehoz docilit jinym zpusobem. Rozsirit obzory tam, kde to zkusil zatim malokdo.

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