[JS] Jak dopasować rozmiar ramki do zawartości?

0

Cześć. Mam takie coś w pliku *.js:

document.write('<iframe src="forum/index.php">Niestety Twoja przeglądarka nie obsługuje ramek. <a href="index.php">Kliknij tu</a>, aby przejść do księgi gości</iframe>');

Teraz jak zrobić, aby ramka dopasowywała swój rozmiar do rozmiarów zawartości?
Ktoś kiedyś coś wspominał o divach. Żebym sprawdzał ich pozycję i tak powiększał.

Ale i tak nie mam pojęcia, jak to zrobić.

0

Rozumiem ze chodzi o dopasowanie wysokosci iframe (z szerokoscia bedzie analogicznie):

document.write('<iframe id="Iramka" src="forum/index.php">Niestety Twoja przeglądarka nie obsługuje ramek. <a href="index.php">Kliknij tu</a>, aby przejść do księgi gości</iframe>');

function ustaw()
 {
 Iramka.style.height = document.body.scrollHeight;
 }

function spr()
 {
 if (Iramka.document.body)
  Iramka.document.body.onload = ustaw;
 else 
  setTimeout('spr()', 100);
 }

Nie sprawdzalem jak to dziala, ale powinno byc dobrze :p

0

No niestety w ogóle nie działa :(

0

:D porobilem male bledy bo bylo pisane z glowy :P
To jest sprawdzone i dziala:

function ustaw()
 {
 <font color="red">Iramka.frameElement.style.height = Iramka.document.body.scrollHeight+30;</font>
 }

function spr()
 {
 if (Iramka.document.body)
  Iramka.document.body.onload = ustaw;
 else
  setTimeout('spr()', 100);
 }
<font color="red">spr();</font>
0

Kurde, dalej nie działa. Kombinowałem nawet coś z tym, ale nic. Czy mógłbyś w ogóle wyjaśnić ten kod?

0

ale on jak coś to jest chyba IE only

0
Adamo napisał(a)

ale on jak coś to jest chyba IE only

Nie może być, bo ja mam IE :)
Ale i tak dobrze by było, żeby działało na wszystkich przeglądarkach. Jak się nie da, to będę musiał kombinować jakoś inaczej :(

0
Juhas napisał(a)

Czy mógłbyś w ogóle wyjaśnić ten kod?

function spr()
 {
 if (Iramka.document.body)
  Iramka.document.body.onload = ustaw;
 else
  setTimeout('spr()', 100);
 }
spr();

Najpierw sprawdzam czy Iramka.document.body istnieje, to znaczy czy zaczela ladowac sie strona do iframe, bo czasem nie zdazy zaczac ladowac i wtedy skrypt wywala blad.
Jak nie to wywolyjemy po 1/10 sekundzie jeszcze raz funkcje sprawdzajaca
setTimeout('spr()', 100);
Jak tak to przypisujemy zdarzenie onload, dla dokumentu z ramki
Iramka.document.body.onload = ustaw;
No ale musimy zaczac ta reakcje lancuchowa:
spr(); (to czego zapomnialem poprzednio :P)

function ustaw()
 {
 Iramka.frameElement.style.height = Iramka.document.body.scrollHeight+30;
 }

Iramka - to nie obiekt na stronie tylko obiekt tak jak window,
dlatego Iramka.frameElement wskazuje na nasz obiekt na stronce.
no ustawiamy jego wysokosc na taka jaka jest stronki w ramce:
scrollHeight czyli tyle o ile mozna scrollowac pionowy pasek
+30 dla pewnosci (marginesy strony)

Ja mam IE v6.0 SP2
Pokombinuj, powylaczaj niektore opcje, daj alerty zeby zobaczyc czy w ogóle funkcje sie wywoluja

Moze byc jeszcze taka przyczyna ze na tej stronie co jest pokazywana w iframe jest juz zadeklarowane zdarzenie onload!!

0

OK, lekko zmieniłem:

function ustaw()
 {
 Iramka.frameElement.style.height = Iramka.document.body.scrollHeight+30;
 }

function spr()
{
 if (Iramka.document.body != null) ustaw();
 else
  setTimeout('spr()', 100);
}
spr();

I teraz jest ok. Ale Opera się wywala na warunku. Niezależnie, czy zrobię bez: "!= null", czy z tym. Mówi coś, że typ nie może być skonwertowany na obiekt :| Ale ogólnie uważam, że Opera jest be.

0
Juhas napisał(a)

Ale ogólnie uważam, że Opera jest be.

Opera jest be. To fakt. Ale ten skrypt jest IE Only :[

Zrób tak:

<script>
function ustaw(elm){
  var s=elm.style, b=elm.contentWindow.document.body
  s.height=b.scrollHeight+20, s.width=b.scrollWidth+20
}
</script>
<iframe onload="ustaw(this)" src="plik.htm"></iframe>

to przynajmniej pod IE i Mozillami zadziala...

0
piechnat napisał(a)
Juhas napisał(a)

Ale ogólnie uważam, że Opera jest be.

Opera jest be. To fakt. Ale ten skrypt jest IE Only :[

Zrób tak:

<script>
function ustaw(elm){
  var s=elm.style, b=elm.contentWindow.document.body
  s.height=b.scrollHeight+20, s.width=b.scrollWidth+20
}
</script>
<iframe onload="ustaw(this)" src="plik.htm"></iframe>

to przynajmniej pod IE i Mozillami zadziala...

No to działa lepiej, bo działa na bieżąco(onload). Ale i tak Opera ma swój świat ;)
Po prostu chyba nie widzę innego wyjścia, jak warunek typu:

if (navigator.appName=='Opera') document.write('blabla.. opera, blabla kliknij tu');

:)

// nie wiedziec czemu, w Operze appName ma wartosc 'Microsoft Internet Explorer' :D - m.p

1 użytkowników online, w tym zalogowanych: 0, gości: 1