Autor Zpráva
Fuxoft
Profil
Dobrý den,

mám problém, který se projevuje pouze v MSIE a pouze uvnitř iFrame.

Zde je jednoduchý webchat: http://fuxoft.cz/fffilm/ffchat/index.htm
Zde je tentýž webchat uvnitř iFramu: http://fuxoft.cz/fffilm/ffchat/test_iframe.htm

Chat je realizován jako stránka s 50 řádky, která je pomocí JS automaticky odscrollována tak, aby byly vždy vidět ty nejposlednější z nich (a pole pro vkládání textu, které je úplně dole). To vše pomocí následující funkce:

    var div=document.getElementById("ffchat");
    div.scrollTop = div.scrollHeight - div.offsetHeight;    

Toto funguje v Chromu i ve Firefoxu. V MSIE to ale funguje pouze na samostatné stránce, kdežto uvnitř iFrame to nefunguje (stránka neodscrolluje, takže místo posledních příspěvků a input fieldu vidím nejstarší příspěvky).
Davex
Profil
Zkus to takhle: Scroll-down problém.
Jan Kupka
Profil
Fuxoft:

Dobrý den,

zkusil bych řádně nadefinovat DOCTYPE, aby to prohlížeče neházelo do Quirks módu.
Fuxoft
Profil
Ted si uvedomuju, ze scrollovani okna vlastne nemuze pomoci. Ja totiz potrebuju odscrollovat ten vnitrni div element, nikoliv okno... V ostatnich browserech to funguje, v MSIE nikoliv...


Jan Kupka:
Netuším co tam napsat. Mám Linux a pro MSIE jsem nikdy stránky nedělal.
Jan Kupka
Profil
Fuxoft:

Před značku <html> dejte <!DOCTYPE html> (jedná se o HTML5 Doctype, díky kterému prohlížeče stránky vykreslí ve standardním režimu). Výsledná struktura tedy bude:

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
  </body>
</html>
Fuxoft
Profil
Jan Kupka:
Tak ne, nevidím změnu...
_es
Profil
Fuxoft:
problém, který se projevuje pouze v MSIE
V akej verzii IE? V IE8 to funguje.

Riešenie spomenuté v [#2] si skúšal? Alebo môžeš skúsiť scrollIntoView.
Jan Kupka
Profil
Fuxoft:

Změna nastala, v IE se už správně zobrazuje obsah iframe a to, že se stránka vykresluje ve standardním režimu, ovlivňuje např. hodnoty, které JS vrací při zjišťování různých vlastností, souvisejících s rozměry prvků.

K logice scrollování - díval jsem se do kódu, který na stránce používáte:

var div=document.getElementById("ffchat");
div.scrollTop = div.scrollHeight - div.offsetHeight;

ve funkci scrollDown vám k ničemu nepomůže. Element #ffchat se automaticky roztahuje na výšku podle obsahu a jelikož nemá nastavenou vlastnost overflow na scroll nebo auto, nikdy se u něj nebude zobrazovat scrollbar. Přiřazování hodnoty k vlastnosti scrollTop tak nemůže nic dělat (navíc do ní pokaždé přiřazujete hodnotu 0).

Pokud tedy chcete, aby stránka byla neustále odscrollovaná až dolů, musíte se zaměřit na scrollování celého dokumentu v iframe. Můžete toho docílit např. voláním fce:

window.scrollTo(x,y);

kde x je v tomto případě 0 (horizontálně scrollovat nechcete) a y je výška stránky. Cross-browser verze pro zjištění výšky stránky může být např.:

var doc = window.document,
    html = doc.documentElement,
    pageHeight = Math.max(doc.body.scrollHeight, doc.body.offsetHeight, html.scrollHeight, html.offsetHeight, html.clientHeight);

Vše ostatní ve fci scrollDown je zbytečné.

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: