koresaram
17-04-2013, 15:32
добрый день.
столкнулись с такой проблемой. есть страница, на которую фреймами вставлены 3 блока. при этом один из фреймов должен быть резиновой высоты. по резиновой высоте фреймов было найдено решение Дмитрия Котерова http://dklab.ru/chicken/nablas/58.html
РЕШЕНИЕ: страница 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>
html, body { padding: 0; margin: 0; }
</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 h = Math.ceil(document.body.scrollHeight / 30) * 30;
var ie = 0 /*@cc_on + @_jscript_version @*/;
if (!ie) window.name = "h" + h;
else top.location.replace("http://master.com/#h" + h);
}
</script>
</body>
</html>
соответственно были сделаны вставки фреймов в таком виде
это простой фрейм с фиксированной высотой
<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
собственно вопрос - что с этим можно сделать?
столкнулись с такой проблемой. есть страница, на которую фреймами вставлены 3 блока. при этом один из фреймов должен быть резиновой высоты. по резиновой высоте фреймов было найдено решение Дмитрия Котерова http://dklab.ru/chicken/nablas/58.html
РЕШЕНИЕ: страница 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>
html, body { padding: 0; margin: 0; }
</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 h = Math.ceil(document.body.scrollHeight / 30) * 30;
var ie = 0 /*@cc_on + @_jscript_version @*/;
if (!ie) window.name = "h" + h;
else top.location.replace("http://master.com/#h" + h);
}
</script>
</body>
</html>
соответственно были сделаны вставки фреймов в таком виде
это простой фрейм с фиксированной высотой
<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
собственно вопрос - что с этим можно сделать?