non ho ancora provato il tuo codice perchè ero alle prese con autoesperimenti
Un modo che ho provato è questo.
Metto un segnaposto alla fine della pagina e ne ricavo la posizione y. L'aumento di 18 px per tenere conto del salto riga e ridimensiono la finestra.
Allora, con IE6 e Firefox ottengo buoni risultati, sia con poche righe di tabella, sia con molte righe, perchè i browser si dimensionano alla max altezza visibile.
CON OPERA 9 NON FUNZIONA
il popup è aperto con la solita:
window.open("a.asp", "popup","top=0px,left=0px,width=500px,height=500px ,resizable=yes,scrollbars=yes");
la pagina asp (se non si usa asp, basta mettere una tabella con x righe) è:
codice:
<!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>
<title>Pagina senza titolo</title>
<script type="text/javascript" src="../js/libreria.js"></script>
<script language="javascript" type="text/javascript">
// <!CDATA[
function window_onload()
{
var y = getRealTop($("br1"));
ridimensiona(y);
}
function ridimensiona(y)
{
window.setTimeout(function() {onsetTimeoutRidimensiona(y);}, 300);};
function onsetTimeoutRidimensiona(y)
{
var wh = ClientSize();
var w = wh.width;
var h = wh.height;
window.resizeBy(0, y - h + 18);
}
// ]]>
</script>
</head>
<body onload="return window_onload()">
<table border="1">
<%for i=1 to 15 %>
<tr><td><%=i %></td></tr>
<%next %>
</table>
<br id="br1" style="font-size:0pt;" />
</body>
</html>
le altre funzioni di libreria sono
codice:
/*----------------------------------------------------------------------------------------
//restituisce in un oggetto {width:myWidth, height:myHeight }
//lo spazio utile interno del browser
//esempio:
function window_onresize()
{
var wh = ClientSize();
var w = wh.width;
var h = wh.height;
}
-----------------------------------------------------------------------------------------*/
function ClientSize()
{
var myWidth = 0, myHeight = 0;
if( typeof( window.innerWidth ) == 'number' )
{
//Non-IE
myWidth = window.innerWidth;
myHeight = window.innerHeight;
}
else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
{
//IE 6+ in 'standards compliant mode'
myWidth = document.documentElement.clientWidth;
myHeight = document.documentElement.clientHeight;
}
else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) )
{
//IE 4 compatible
myWidth = document.body.clientWidth;
myHeight = document.body.clientHeight;
}
return {width:myWidth, height:myHeight };
}
//al posto di mettere document.getElementById("div1"), mettere $("div1")
//da prototype.js
function $()
{
var elements = new Array();
for (var i = 0; i < arguments.length; i++)
{
var element = arguments[i];
if (typeof element == 'string')
element = document.getElementById(element);
if (arguments.length == 1)
return element;
elements.push(element);
}
return elements;
}
//-----------------------------------------------------------------------
//restituisce la coordinata y di un elemento rispetto alla pagina
//-----------------------------------------------------------------------
function getRealTop(el) {
if (arguments.length==0) el = this;
if(el == undefined) return 0;
yPos = el.offsetTop;
tempEl = el.offsetParent;
while (tempEl != null) {
yPos += tempEl.offsetTop;
tempEl = tempEl.offsetParent;
}
return yPos;
}