Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] iframe резиновой высоты, IE и невозможность перехода по ссылкам внутри "родителя" (http://forum.oszone.net/showthread.php?t=258832)

koresaram 17-04-2013 15:32 2134477

iframe резиновой высоты, IE и невозможность перехода по ссылкам внутри "родителя"
 
добрый день.
столкнулись с такой проблемой. есть страница, на которую фреймами вставлены 3 блока. при этом один из фреймов должен быть резиновой высоты. по резиновой высоте фреймов было найдено решение Дмитрия Котерова http://dklab.ru/chicken/nablas/58.html

PHP код:

РЕШЕНИЕстраница master.com/index.html
<body>
<
iframe
src
="http://slave.com/frame.html" height="150" 
style="padding:0; margin:0" scrolling="no"
onload="var th=this; setTimeout(function() { 
    var h=null;
    if (!h) if (location.hash.match(/^#h(\d+)/)) h=RegExp.$1;
    if (!h) for (var i=0; i<10000; i+=30) if (top.frames['h'+i]) { h=i; break; }
    if (h) th.style.height=h+'px';
}, 10)"
></iframe>
</
body>

РЕШЕНИЕстраница slave.com/frame.html
<html>
<
style>
htmlbody padding0margin0; }
</
style>
<
body>
    
Header.
    <
br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
    
Footer.
    <
script>
    
window.onload = function() {
        var 
Math.ceil(document.body.scrollHeight 30) * 30;
        var 
ie /*@cc_on + @_jscript_version @*/;
        if (!
iewindow.name "h" h;
        else 
top.location.replace("http://master.com/#h" h);
    }
    
</script>
</body>
</html> 


соответственно были сделаны вставки фреймов в таком виде

PHP код:

это простой фрейм с фиксированной высотой
<div class="content">
<
iframe src="/iframe_tags.html" height="80px" width="100%" scrolling="no" frameborder="0" marginheight="0" marginwidth="0"></iframe>
</
div>


а это фрейм с резиновой высотой  
<div id="left_sidebar">
<
iframe src="/iframe_left_column.html" width="250px" scrolling="no" frameborder="0" marginheight="0" marginwidth="0" 
    
onload="var th=this; setTimeout(function() { 
    var h=null;
    if (!h) if (location.hash.match(/^#h(\d+)/)) h=RegExp.$1;
    if (!h) for (var i=0; i<10000; i+=10) if (top.frames['h'+i]) { h=i; break; }
    if (h) th.style.height=h+'px';
}, 50)"
></iframe

в итоге с высотой все хорошо, но при попытках переходов по ссылкам внутри родительского фрейма в IE ссылки принимают следующий вид http://site.ru/archive/YaBB.cgi/#h470 и перехода по этой ссылке нет. пользователь сперва видит содержимое страницы (причем ссылка в строке браузера выглядит как http://site.ru/archive/YaBB.cgi?board=law) после чего ссылка в строке бразуера изменяется на site.ru/archive/YaBB.cgi/#h470 и пользователь остается на той же странице где и был.

в других браузерах с переходами все нормально и ссылки при переходах "нормальные" http://site.ru/archive/YaBB.cgi?board=law

собственно вопрос - что с этим можно сделать?

koresaram 18-04-2013 12:26 2135013

погуглил еще по вопросу динамического изменения высоты iframe в пределах одного домена. нагуглил такое:

в код страницы (в которую вызывается фрейм вставляется такой скрипт:
PHP код:

<script
function 
myFunc () 

document.getElementsByName ('quotes_frame') [0].style.height = (window.frames ['quotes_frame'].document.body.scrollHeight 10) + 'px'

</script> 

а при вызове iframe добавляется событие onload
PHP код:

<iframe src="left_frame.htm" width="250px" scrolling="no" frameborder="0" marginheight="0" marginwidth="0" name="quotes_frame" onload="myFunc ()"

сама страница (фрейма) left_frame.htm не содержит никаких скриптов и т.д. чистый html

и тут еще возникла другая проблемка: не отображается контент родительского файла, расположенный после вставки iframe


в итоге высота меняется в IE, FF, Opera а вот в Chrome - не меняется. как можно поправить это дело?

koresaram 18-04-2013 17:16 2135197

докопался до истины. поскольку фреймы с одного домена все решилось простым расчетом подгружаемого iframe
PHP код:

<iframe src="/iframe_left_column1.html" width="250px" scrolling="no" frameborder="0" marginheight="0" marginwidth="0" onload="this.height=this.contentWindow.document.body.scrollHeight;"></iframe

в файле iframe_left_column1.html никаких скриптов и прочего не надо.


Время: 22:12.

Время: 22:12.
© OSzone.net 2001-