Javascript-форум (https://javascript.ru/forum/)
-   Opera, Safari и др. (https://javascript.ru/forum/css-html-browser/)
-   -   iframe на javascript в Chrome (https://javascript.ru/forum/css-html-browser/29059-iframe-na-javascript-v-chrome.html)

spals 13.06.2012 15:11

iframe на javascript в Chrome
 
Всем добрый день, прошу помощи, у меня проблема с отображение iframe на javascript в Chrome, в других браузерах всё нормально, проблема в том что страничка начинает ползти вниз, при первой загрузке всё нормально но в последующих перемещениях по страничкам сама страничка ползёт вниз. До бесконечности. В чём может быть проблема? Что можно изменить в коде? За помощь буду очень благодарен.

Вот моежете проверить сами ТЫК

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

<title>Demo iframe Resize by Exterior</title>

<script type="text/javascript">
<!--
var timeout;

function clickAction() {
	frameFitting();
	var fr = document.getElementById('demo_frame').contentWindow.document.body.getElementsByTagName('a');
	for (var i=0; i<fr.length; i++) {
		fr[i].onclick = function() {
			clearInterval(timeout);
			timeout = setInterval("frameFitting()",100);
		}
	}
}

function frameFitting() {
	document.getElementById('demo_frame').width = '100%';
	document.getElementById('demo_frame').height = document.getElementById('demo_frame').contentWindow.document.body.scrollHeight+4+'px';
}

onload = clickAction;
//-->
</script>

</head>

<body>

<iframe src="http://cs.city.kg/stats/index.php" id="demo_frame" align="center" scrolling="no" frameborder="0" marginheight="0" marginwidth="0" width="100%"></iframe>

</body>
</html>

spals 13.06.2012 18:50

Help:-?

bes 13.06.2012 20:10

У вас frameFitting() увеличивает высоту фрейма , а в clickAction() назначаются обработчики кликов по ссылкам: нажав какую-нибудь ссылку, вы запустите setInterval, который будет вызывать frameFitting() через 100мс, что и будет постепенно увеличивать высоту фрейма.
Не совсем понятно, чего вы хотите добиться, назначая такие обработчики клика ссылкам.

spals 13.06.2012 20:17

Я в жатве пока совсем дуб, мне всего то что бы страница не съезжала вниз, вот щас порыскал по форуму ничего путного на замену не нашёл.

Мне самое главное автоматическая прокрутка, что бы не было это го ползунка...

bes 13.06.2012 20:19

Цитата:

Сообщение от spals
Я в жатве пока совсем дуб, мне всего то что бы страница не съезжала вниз, вот щас порыскал по форуму ничего путного на замену не нашёл.

В смысле, чтобы не было того, что сейчас??

spals 13.06.2012 20:28

да, я нашёл еще один код, он нормально пашет в хроме, а вот в опере наоборот, можно ли сделать для каждого браузера свой скрипт?

bes 13.06.2012 20:33

Скажите, что хотите сделать-то?

spals 13.06.2012 20:36

Мне нужно что бы скрипт чётко подгонял страничку в iframe в высоту.

Вот немного получше, в хроме он не ползёт сам вниз но он подгоняет странички не верно, если предыдущая страничка была больше то под меньшую он уже не подгонит.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<script language="JavaScript">
<!--
function autoResize(id){
    var newheight;
    var newwidth;

    if(document.getElementById){
        newheight=document.getElementById(id).contentWindow.document .body.scrollHeight;
        newwidth=document.getElementById(id).contentWindow.document .body.scrollWidth;
    }

    document.getElementById(id).height= (newheight) + "px";
    document.getElementById(id).width= (newwidth) + "px";
}
//-->
</script>

<IFRAME SRC="http://cs.city.kg/cs" width="100%" height="200px" id="iframe1" marginheight="0" frameborder="0" onLoad="autoResize('iframe1');"></iframe>
 </body>
 </html>

bes 13.06.2012 20:47

Попробуйте так
<iframe src="index.htm" 
  onload=" this.height = this.contentWindow.document.body.scrollHeight; 
"></iframe>

bes 13.06.2012 20:56

То есть используйте обработчик загрузки фрейма, в который и поместите код задания размеров этого фрейма (больше ничего не требуется).
Заработает, когда будет на сервере (или через denwer, например), на локальном компьютере проверить не даст политика безопасности.

spals 13.06.2012 21:02

В опере как всегда всё отлично работает, а вот в хроме опять же есть предыдущая страничка была в высоту больше, то если страничка меньшей высоты остаётся высота предыдущей (большей по ысоте)

ТЫК

Зато при скрипте который ниже, в хроме высота выравнивается верно но в опере наоборот.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 <title>auto iframe height adjust</title>
 <style>
 </style>
 <script type="text/javascript">
 <!--//
 function sizeFrame(frameId) {
 var F = document.getElementById(frameId);
 if(F.contentDocument) {
 F.height = F.contentDocument.documentElement.scrollHeight+30; //FF 3.0.11, Opera 9.63, and Chrome
 } else {



 F.height = F.contentWindow.document.body.scrollHeight+30; //IE6, IE7 and Chrome

 }

 }

 //-->
 </script>
 </head>
 <body>
 <iframe width="100%" id="myFrame" src="http://cs.city.kg/cs" scrolling="no" frameborder="0" onload="sizeFrame('myFrame')">
 </iframe>
 </body>
 </html>

spals 13.06.2012 21:32

Просто как не хочется делать выбор между хромом и оперой :(

bes 13.06.2012 22:07

Посмотрел ваш "тык", походил по страничкам, вроде всё чётко работает, что в опере, что хроме, что не так?
Хотя нет, вижу у вас на других страничках старый код выравнивания остался.

spals 13.06.2012 22:20

bes об этом я вам и говорю.
Надо как то совместить:

Как только не пробовал совместить код у меня ничего не вышло.

Это для хрома
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 <title>auto iframe height adjust</title>
 <style>
 </style>
 <script type="text/javascript">
 <!--//
 function sizeFrame(frameId) {
 var F = document.getElementById(frameId);
 if(F.contentDocument) {
 F.height = F.contentDocument.documentElement.scrollHeight+0; //FF 3.0.11, Opera 9.63, and Chrome
 } else {



 F.height = F.contentWindow.document.body.scrollHeight+0; //IE6, IE7 and Chrome

 }

 }

 //-->
 </script>
 </head>
 <body>
 <iframe width="100%" id="myFrame" src="http://cs.city.kg/cs" scrolling="no" frameborder="0" onload="sizeFrame('myFrame')"
  onload=" this.height = this.contentWindow.document.body.scrollHeight; 
"></iframe>
 </body>
 </html>


Это для оперы
<iframe src="http://cs.city.kg/cs" width="100%" scrolling="no" frameborder="0" marginheight="0" marginwidth="0"
  onload=" this.height = this.contentWindow.document.body.scrollHeight; 
"></iframe>

bes 13.06.2012 23:46

Вставите свои адреса, у меня работает, что в опере, что в хроме.
<iframe width="100%" id="myFrame" src="index1.html" scrolling="no" frameborder="0"
   onload="
    var content = this.contentWindow || this.contentDocument;
    this.height = 0;
    this.height = content.document.body.scrollHeight; 
" >
</iframe>
<button onclick="document.getElementById('myFrame').location.href = 'index2.htm'">click</button>

spals 14.06.2012 00:14

bes большое вам спасибо! :)

spals 14.06.2012 00:18

Очень хорошо помогли

bes 31.05.2013 19:57

Цитата:

Сообщение от bes
 var content = this.contentWindow || this.contentDocument;
4
    this.height = 0;
5
    this.height = content.document.body.scrollHeight;

со временем понимаешь какую хрень писал, получая ссылку либо на окно фрейма, либо на его документ, а потом используя ссылку лишь на окно

хотя я и до сих пор не понимаю зачем городить этот выбор между contentWindow.document и contentDocument,
если contentWindow поддерживается везде, кроме IE5, про который уже давно забыли, и это самый короткий кроссбраузерный способ получить документ фрейма (frameObject.contentWindow.document),
а contentDocument не поддерживается IE<8 и соответственно не работает в IE8+ в документе без doctype, так как в этом случае идёт переход в режим совместимости
хотя если забить на IE7 и тестить при указании doctype, то contentDocument конечно лучше


Цитата:

Сообщение от bes
Заработает, когда будет на сервере (или через denwer, например), на локальном компьютере проверить не даст политика безопасности.

сейчас понимаю, что денвер для лохов :D

spals 16.12.2013 21:44

bes,
Хах, ясно, все приходит с опытом, а я так ничего не начал понимать в jquery

Deff 16.12.2013 22:59

Цитата:

Сообщение от bes
и это самый короткий кроссбраузерный способ

:)
frameName.document


Часовой пояс GMT +3, время: 02:21.