Autor | Zpráva | ||
---|---|---|---|
MartinZ Profil * |
#1 · Zasláno: 30. 1. 2012, 21:23:49
Dobrý den,
potřebuji poradit jak dosáhnout toho, že po načtení stránky se mi v iframe v té stránce přesune na nějaké id prvku ve stylu záložek? Uf, je to dost krkolomné, takže poměrně konkrétně je známý problém popsán na http://podpora.endora.cz/viewtopic.php?f=27&t=4695#p25634, ale jeho řešení je zatím neznámé. Máte někdo nějaký nápad? |
||
Chamurappi Profil |
#2 · Zasláno: 31. 1. 2012, 23:03:33
Reaguji na MartinaZ:
Popis jsem moc nepochopil. V čem se to má lišit od normálních záložek? Pokud jsou obě stránky na stejné doméně, lze se z onload u dostat k té vnitřní skrz this.contentDocument .
|
||
MartinZ Profil * |
#3 · Zasláno: 31. 1. 2012, 23:26:23
No od normálních záložek se to nemá lišit (aspoň jsem si to myslel). Když se však napíše ten <iframe> s URL a odkazem na záložku (http://url/#zalozka), tak to má poměrně nepříjemný vedlejší efekt, a to takový, že se stránka v iframe zobrazí na záložce, ale i stránka , kde je vložen ten iframe se také zobrazí na záložce (v tom iframe). Hrozně blbě se to vysvětluje, lepší je to vyzkoušet, každopádně je to nepříjemné a jediný prohlížeč, který to dokáže správně interpretovat je Firefox.
Díky za typ, podívám se na to, bohužel ani to: <iframe src=" ... " onload="document.getElementById('foo').focus();"></iframe> |
||
Chamurappi Profil |
#4 · Zasláno: 31. 1. 2012, 23:56:01
Reaguji na MartinaZ:
„ale i stránka , kde je vložen ten iframe se také zobrazí na záložce“ Aha. Tak tomu už rozumím. I když mám chuť vyrobit si pokus, protože mi to nepřipadá pravděpodobné. „bohužel ani to […] nezabralo, což by také mělo fungovat“ Nemělo. Hledá to id="foo" v rodičovské stránce. Musíš hledat v contentDocument u.
Tipnul bych si, že zavolání metody focus() vyvolá zmíněný nežádoucí efekt (dost možná všude), takže spíš bys k cílovému elementu měl jen narolovat, bez focusování.
|
||
MartinZ Profil * |
#5 · Zasláno: 2. 2. 2012, 22:59:51
Děkuji za rady, ale zdá se mi, že některé prohlížeče neumí úplně pracovat s <iframe>. Provedl jsem názorný pokus:
Na web jsem umístil následující script: window.onload = fce; function fce() { if(self!=top) window.location.href="#div"; } Efekt to má však stejný. Pokud načtu z nějaké externí stránky do iframe tuto stránku se scriptem, opravu se vše provede jako má, tzn. že se iframe scrollne na #div, jenže to samé udělá ta externí stránka kde je vložen iframe. Dělá to IE a Chrome. Opera to dělala, ale před pár dny přišla aktualizace a tak se teď už Opera chová správně stejně jako Aurora... Nevím jak si s tím mám poradit. Tento pokus mi spíše dává najevo, že je to iframe a proto mám smůlu. |
||
Chamurappi Profil |
#6 · Zasláno: 2. 2. 2012, 23:13:44
Reaguji na MartinaZ:
„Nevím jak si s tím mám poradit“ Začal bych na tvém místě tím, že bych přestal naříkat a zkusil bych věnovat pozornost již dříve uvedeným radám. |
||
MartinZ Profil * |
#7 · Zasláno: 2. 2. 2012, 23:22:22
Však jsem to četl, ale jaká je změna? Vždyť se jedná pouze o metodu přístupu a pokud jsem výše dokázal, že některé prohlížeče špatně interpretují skok na záložku v iframe, jak si tím pomůžu? Zase se dostanu tam kde jsem byl. Předtím ten focus bylo jen plácnutí, dělají to záložky a je jedno jestli to budu dělat tak či onak. Však je z toho viditelné, že na nějakou změnu pouze v iframe zareaguje i rodičovské okno, což je prostě evidentní problém, který by neměl nastat. Nebo na to máte jiný názor?
|
||
Chamurappi Profil |
#8 · Zasláno: 2. 2. 2012, 23:56:51
Reaguji na MartinaZ:
Narolovat na element přeci jde i bez záložky. Libovolný posuvník můžeš ovládat skriptem. Pokud ti jde o posuvník v okně/rámu, nejsnazší je volat window.scrollTo nebo window.scrollBy . Pozici elementu v rámci viditelné plochy okna/rámu zase zjistíš metodou getBoundingClientRect() . Takže když si to spojíš, dostaneš cca tohle:
var hrana = element.getBoundingClientRect().top; window.scrollBy(0, hrana); |
||
MartinZ Profil * |
#9 · Zasláno: 3. 2. 2012, 12:57:24
Omlouvám se za moje nervózní příspěvky a velice vám děkuji za pomoc. Je to přesně to co potřebuji, ba dokonce lepší. :)
Pokud by někdo řešil podobný problém (ačkoliv tomu nevěřím, protože nutnost použití iframe je skoro nulová) tak jsem to napsal následovně: function scroll() { if(self != top) { var div = document.getElementById("ID"); var rect = div.getBoundingClientRect(); window.scrollBy(0, rect.top - 50); } else { /* Nic nedělá, není totiž v IFRAME */ } } Ještě jednou děkuji! |
||
Keeehi Profil |
Pokud to else nic nedělá, ani tam nemusí být. Postačující je:
if(self != top) { var div = document.getElementById("ID"); var rect = div.getBoundingClientRect(); window.scrollBy(0, rect.top - 50); } |
||
MartinZ Profil * |
#11 · Zasláno: 3. 2. 2012, 14:00:11
To samozřejmě vím, je to tu jako ukázka, protože rozhodně ne všem je jasné, že podmínka self!=top zjišťuje iframe. Takže aby to bylo ke gustu všem, domysleme si, že je tam napsáno:
/* Zde se provede akce, která se spustí pokud není web načítán z IFRAME */ |
||
Chamurappi Profil |
#12 · Zasláno: 3. 2. 2012, 14:32:24
Reaguji na MartinaZ:
Na odkázaném fóru Endory jsi sliboval: „Kdo první přijde s funkčním řešením, pošlu mu čokoládu...“ |
||
MartinZ Profil * |
#13 · Zasláno: 3. 2. 2012, 15:42:55
Pošlete mi svojí adresu na mail mrtnzlml@gmail.com, málem bych zapomněl, díky za připomenutí...
|
||
Chamurappi Profil |
#14 · Zasláno: 3. 2. 2012, 16:09:35
Reaguji na MartinaZ:
Všiml jsem si, že v podpisu na Endoře propaguješ validátor a seo-servis.cz. Vzdávám se své čokolády, pokud si přečteš starší diskusi a přehodnotíš svá doporučení. |
||
MartinZ Profil * |
#15 · Zasláno: 3. 2. 2012, 16:38:31
Podpis jsem umazal. Nemám náladu se s někým hádat o tom co je dobré, protože to je ta nejspornější věc co může být vůbec. Líbí se mi na to, že je to česky a minimálně to ukáže hrubé nedostatky ve zdrojovém kódu. Ostatně ať si každý dělá co chce. A proto zde s vědomím určitých skutečností napíšu i to, že nebudu propagovat pro jistotu ani český validátor, protože se zase najde někdo jiný, kdo bude prskat...
Aneb debaty o validátorech je stejná jako debata windows vs. linux, takže jako svoje doporučení jsem tam nechal pouze svůj nevalidní a seu odporující web na který nikdo nechodí, protože se o něj nestarám. Prosím o zamknutí tohoto vlákna, nabídka na čokoládu pořád platí... |
||
Časová prodleva: 12 let
|
0