ugrás a tartalomhoz

nem a tényleges ablakméretet adja vissza a offsetWidth/Height

szabozee · 2007. Aug. 17. (P), 18.02
Az alábbi script -elvileg- lementi az aktuális window méretet, majd beállítja 800x600-ra. Mikor megnyomom a vissza gombot a böngészőben, akkor meg visszaállítja az eredeti ablakméretet. DE NEM! Mégpedig azért, mert a document.documentElement.offsetWidth és Height párja sem azt a méretet adja visza(IE és FF nél sem), mint amekkora a window, hanem egy kicsivel kevesebbet, így mindig egy kicsit kisebb lesz az ablak, míg el nem fogy. Bár semmi jelentősége nincs, hogy onload-ban van-e, vagy sem, de onloadban is ugyanazt adja vissza. Rengeteg alternatíva van, ahogy meg lehet oldani ugyanezt a feladatot. Nem alternatív megoldást keresek, hanem az a kérdés, hogy így miért nem jó, mi a hiba ebben a kódban ?

window.onunload = unloadPage;
Width=document.documentElement.offsetWidth;
Height=document.documentElement.offsetHeight;
function unloadPage(){ window.resizeTo(Width,Height); }
window.resizeTo(800,600);
 
1

innerwidth, clientwidth

Ajnasz · 2007. Aug. 17. (P), 18.36
http://www.howtocreate.co.uk/tutorials/javascript/browserwindow
2

Köszönöm a gyors választ, de nem itt van a kutya elásva.

szabozee · 2007. Aug. 17. (P), 22.04
Pontosítok a kérdésen. Nem az a gondom, hogy nemtudom megoldani a "feladványt", hanem az, hogy szépen nem tudom megoldani.

index.html
<body><a href="index2.html">Klikk</a><body>
Az általad javasolt módon 'patchelt', de hibásan működő
index2.html

<head>
script type="text/javascript">
var myWidth = 0, myHeight = 0;
window.onunload = function() { window.resizeTo(myWidth,myHeight); };
window.onload = function() {
  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;
  }
  window.resizeTo(800,600);
}
</script>
</head>
<body>[vissza] a browseren<body>
A jól működő, de csúnya megoldás
index2.html

<head>
script>
var OldWidth = 0;
var OldHeight = 0;
var myWidth = 0;
var myHeight = 0;

function calcMyWH() {
  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;
  }
}


window.onunload = function() { window.resizeTo(OldWidth,OldHeight); };
window.onload = function() {
  calcMyWH();
  window.resizeTo(800,600);
  OldWidth=myWidth;
  OldHeight=myHeight;
  calcMyWH();
  OldWidth=OldWidth+(800-myWidth);
  OldHeight=OldHeight+(600-myHeight);
}
</script>
</head>
<body>[vissza] a browseren<body>
A head és a script közé mindkét index2.hml-nél vissza kell rakni a <-t hogy működjön. Valamiért azzal együtt nem tudtam feltölteni.

Remélem így érthetőbb, mi a gond. Hogyan tudom ezt a részt:
OldWidth=OldWidth+(800-myWidth);
OldHeight=OldHeight+(600-myHeight);

kihagyni a kódból ?