IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Как задать высоту Iframe? (http://www.imho.ws/showthread.php?t=55841)

Anthony 07.04.2004 01:46

Как задать высоту Iframe?
 
Подскажите, люди, как сделать так, высоту IFRAME, равной его содержимому?
Указать в процентах-пикселях не могу - фиг его знает, что в него загружать прийдется, а штучки типа Overflow:visible не работают
:confused: :confused: :confused:

Hubbitus 07.04.2004 02:43

Я сам задавался этим вопросом долгое время и так ничего и не нашел, да и вопрос такой уже поднимался тут на форуме....
Но вот недавно натолкнулся на такую вещь, попоробуй использовать document.body.scrollWidth и document.body.scrollHeight соответственно для загруженного документа чтобы определить его размер - ну а дальше дело техники ресайзить, я сам не пробовал, но по идее должно работать!

RaZEr 07.04.2004 22:56

Ребята, вас не ломает таким гемороем страдать? Подгрузили в iframe, что нужно, а там *.cloneNode() и в основной документ.

Hubbitus 08.04.2004 00:02

2RaZEr чего-то я не понял как с помощью этой функции решить поставленную задачу изменения размера ифрейма?

RaZEr 08.04.2004 05:24

Цитата:

чего-то я не понял
мои соболезнования :) ...

Hubbitus 08.04.2004 14:16

Цитата:

RaZEr:
мои соболезнования
Извините, конечно... но может лучше ваши объяснения?!

RaZEr 08.04.2004 21:33

http://www.imho.ws/showthread.php?s=&postid=378804

Hubbitus 08.04.2004 23:27

2RaZEr Если последний пост был мне, то я теперь решительно запутался: в данном топике решается совсем иная задача никак не связанная с определением высоты фрейма (а именно такая стояла задача сдесь). Если Вы указывали на объяснение использования *.cloneNode() - то я и сам вкурсе что это такое и с чем его едят. И не в ограничениях хостинга проблема (у меня платный хостинг, есть и SSI, и PHP и все что надо...) просто как решить поставленную в данном топике проблему????

Hubbitus 09.04.2004 00:10

А почему именно я так пристал к данному вопросу я все-таки объясню - мне тоже было бы очень неплохо решить подобную проблему.
Конкретный пример (точнее конкретно стоящая передо мной задача): Есть сайт, все сделано на инклюдах, но в одну из страниц вставлено голосование, для того чтобы не обновлять всю страницу из-за ответа (что сильно раздражает пользователей) голосование находится в теге <iframe>. Я написал что-то вроде CMS для своего сайта, поэтому создание и управление голосованиями происходит из формы управления, где количество ответов заранее не задано. Так как голосование находится в контексте страницы, то присутствие полос прокрутки очень нежелательно. Сейчас после создания голосования параметры тега <iframe> подбираются руками после каждого изменения, более того, если пользователь изменит размер браузера, то тоже ничего хорошего не выйдет. Посему я и хочу сделать размеры фрейма в зависимости от ФАКТИЧЕСКОЙ высоты и ширины содержания фрейма!

RaZEr 09.04.2004 00:35

Я говорю о том, что проще подгружать то же голосование в невидимый фрейм, а потом из него, при помощи cloneNode() вставлять в основной документ. Это решает все проблемы с высотой, шириной и т.д.

shuron 09.04.2004 17:19

RaZer

Дай пример а..
а то мы ламеры.. твои короткие и умные ответы не сразу рубим

Hubbitus 09.04.2004 17:39

Цитата:

RaZEr:
а потом из него, при помощи cloneNode() вставлять в основной документ. Это решает все проблемы с высотой, шириной и т.д.
Это решает отнюдь не все проблемы - и появляются новые:
1) Обеспечение полной совместимости со всеми браузерами
2) При голосовании опять же должна быть перезагрузка сначала фрейма, потом перенос на место
3) И, наверное главное: при загрузке сайта, пока полностью не загрузится невидимый фрейм - сильно может расползтись структура и дизайн сайта, т.к. там не будет ничего сначала, а потом оно будет разъезжаться!!!

RaZEr 12.04.2004 04:37

Цитата:

Это решает отнюдь не все проблемы - и появляются новые
... высосанные из пальца :biggrin:

Hubbitus 12.04.2004 21:16

Итак, проблемы реальные....
Помочь посуществу нам так и не помогли...
Поэтому разбираться пришлось самому...
Итак, Anthony, я был не совсем прав в первом своем посте: document.body.scrollHeight - заданная высота фрейма (ну тоесть какая сейча у него она фактическая), а нужно нам document.body.offsetHeight - это какраз "полезная высота", тоесть сколько занимает содержимое фрейма!!!
Никакие листинги приводить не буду, потому что дальше дело техники - пишется функция из одной строчки и вешается на событие onload() основного документа. Вот и все!!!

Как всегда оказалось что самое лучшее решение на поверхности!!!

Anthony 13.04.2004 12:01

Огромное спасибо, Hubbitus. То что document.body.scrollHeight отвечает за реально имеющиеся размеры я в ходе эксперимента уже установил. Теперь начну учить document.body.offsetHeight. :p

И еще вопрос в догонку:
В какой книжке можно сие знание почерпнуть. Так, на будущее, а то в моей таких умных слов нету:blin:, а быть умным иногда так хочется.....

Hubbitus 13.04.2004 12:34

Если я что-то непонятно написал, то не стесняйся справшивать (можешь в привате или по асе..)...
Кстати, если тебе (или кому-то другому) надо то я могу выслать код примера, или сдесь выложить... я просто не думаю что это целесообразно.


А вообще я очень люблю последнее время вот этот справочник

Anthony 14.04.2004 14:53

scrollHeight or offsetHeight
 
scrollHeight or offsetHeight - this is the question.......

И, все-таки, я его почти сделал!:biggrin: Только вот удалось сие именно через scrollHeight. Одно "но" имеется: напихал я в body из фрейма 38 килопапугаев текста, а scrollHeight посчитал его за одну строчку... Короче, затолкав текст в div, мне почти удалось достичь результата с какой-то идиотской погдешностью в 0.5-5.0 строчек. Да здравствует метод научного тыканья и стольник мартышек-машинисток!

Из, подвергавшихся исследованию scrollHeight, оffsetHeight & clientHeight:
scrollHeight - приблизительно выдает "полезную" высоту.
оffsetHeight - "действительные" размеры.
clientHeight - чуть меньше, чем предыдущий, так что, очевидно, то же самое, только с учетом полей - а то я сам посчитать не мог?(кстати, жаль Нетскейпа нету - проверить, а то прошлый раз он мне клиентскую ширину вместе со скроллингом посчитал)

Hubbitus 14.04.2004 15:24

Цитата:

Anthony:
И, все-таки, я его почти сделал!
А я полностью сделал!!! И с точностью до пиксела!

Цитата:

Anthony:
scrollHeight
Как я понял этот параметр именно позиция скроллинга. Поэтому и проблема со строцкой возникла!

Anthony 14.04.2004 17:27

Сдаюсь!
 
ОК, блин! Сдаюсь.
Пишу в ифреймовском хтмльнике на onload тега body:
top.document.getElementById('ifr').style.height=document.body.scrollHe ight;
и опять остается скролл на пару строк. Что и как надо было?



В iframe я подгружал эту же страничку, так она заканчивается на чубчике того колобка, что нарисован на нижнем баннере.

Hubbitus 14.04.2004 22:51

Цитата:

Anthony:
Пишу в ифреймовском хтмльнике на onload тега body:
Я тоже сначала так делал, но потом понял что гораздо удобнее это делать на странице, содержащей фрейм, ведь содержимое фрейма меняется, а ее нет и придется тогда скрипт дописывать во все документы которые грузятся во фрейме!

Цитата:

Anthony:
top.document.getElementById('ifr').style.height=document.body.scrollHe ight;
Я это сделал так:
document.getElementById('myframe').height=document.getElementById('myf rame').document.body.offsetHeight;
И никакого скрола у меня нету! Только учти я сдесь для примера жестко задал ширину фрейма, и никак не учитываю ее, если нужно, то неоюходимо как-то обрабатывать изменение обоих измерений... (думаю что не сложно)

Цитата:

Anthony:
В iframe я подгружал эту же страничку, так она заканчивается на чубчике того колобка, что нарисован на нижнем баннере.
Это я совсем не понял!!! Какую "эту же"? Какой чубчик, какого колобка???....

Anthony 15.04.2004 11:12

В прямом смысле ЭТУ. Сохранил страничку форума, потом - искалечил <body>. А колобок - он внизу с надписью, что: "А баннера нет". Ну, это - не важно. Я сейчас попытаюсь внять Вашим советам... Только вот события onload у iframe, по-моему, нет.....

Hubbitus 16.04.2004 04:42

Цитата:

Anthony:Я сейчас попытаюсь внять Вашим советам... Только вот события onload у iframe, по-моему, нет.....
У фрейма нет. Но вопервых можно повесить на документ загружаемый во фрейме, а во-вторых и не надо!!! Можно повесить на событие основного документа.

Итак что у меня получилось и что работает: Я сохранил ЭТУ ЖЕ страницу в файл imho.htm (ну чтобы во фрейм грузить) и гружу в файле, содержание которого следующее:
Код:

<html>
<head>
<script>
function frame_resize(){
document.getElementById('myframe').width='100%';
document.getElementById('myframe').height=document.getElementById('myframe').contentWindow.document.body.offsetHeight;
}
</script>
</head>
<body onLoad="frame_resize()">
<iframe src=imho.htm height=360 width=260 frameborder=1 align=center id="myframe" name="myframe"></iframe>
</body>
</html>

Полос прокрутки нету!!!
Хотел бы добавить, что если в функции вместо body.offsetHeight; использовать body.scrollHeight; - то результат тотже(но только в некоторых случаях). А разница оказывается в том что scrollHeight - учитывает только видимую часть страницы, а offsetHeight - все. Короче об этом сдесь подробно написано.
И еще одно важное замечание: почему-то это все работает только с локальными файлами, а с удаленными у меня не пашет (может у тебя нормально будет?)!!!


Часовой пояс GMT +4, время: 01:27.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.