Resize Problemlösung »»die 1000te«« und kein ende.
BuG
- dhtml
0 BuG0 holger kuehne
hallo,
kann es sein das sobald ich den inhalt eines layers geändert habe der liebe netscape mir nach einem resize den ursrünglichen inhalt wieder reinschreibt?
hängt das mit dem "window.history.go(0);" zusammen,
und wenn ja welche möglichgeiten gibts noch ausser dieser hier aus dem archiv von der meine browser behaupten es fehle eine ")" klammer...
______________________________________________________
/**
* resize.js 0.3 970811
* by gary smith
* js component for "reloading page onResize"
*/
if(!window.saveInnerWidth)
{ window.onresize = resizeIt;
window.saveInnerWidth = window.innerWidth;
window.saveInnerHeight = window.innerHeight; }
function resizeIt()
{ if (saveInnerWidth < window.innerWidth
saveInnerWidth > window.innerWidth
saveInnerHeight > window.innerHeight
saveInnerHeight < window.innerHeight )
{ window.history.go(0); }}
_____________________________________________________
auch wenn es anscheinend bei allen funktioniert hat die das problem gehabt haben: IE5 und NS 4.5 sagen es fehlt ne klammer!? mir kommt eher die 2. if-bedingung seltsam vor...
fragen über fragen.
danke
BuG
nachtrag.
dreamweaver 3 hat auch eine resize lösung:
aber die hat das selbe problem, dass sobald der text im layer verändert wurde der ursprünfliche text wieder reingeschrieben wird...
_______________________________________________________
<script language="JavaScript">
<!--
function MM_reloadPage(init) {
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
// -->
</script>
_______________________________________________________
Hi
Zur zweiten Frage: Es fehlt nicht eine Klammer, sondern die oder Zeichen. Also:
function resizeIt()
{ if (saveInnerWidth < window.innerWidth
saveInnerWidth > window.innerWidth
saveInnerHeight > window.innerHeight
saveInnerHeight < window.innerHeight )
{ window.history.go(0); }}
Zur ersten Frage: Ja Netscape laed sozusagen die Seite neu und deshalb wird der urspruengliche Inhalt reingeschrieben.
Um fuer dein Problem eine Loesung zu finden muesste man wissen was du dynamisch veraenderst. Also: wird in den Layer ein neuer Text geschrieben, ein anderer (vorher unsichtbarer?) Layer in den Vordergrund gestellt, in einen Layer eine neue html Datei geladen??
Du musst naemlich "irgendwie" :-)) Variablen uebergeben, um alles was du veraenderst nach beim reload automatisch aufzurufen
Wenn das klar ist, dann laesst sich bestimmt eine Loesung finden.
viele Gruesse Holger
hallo,
vielen dank schon mal. also das "" fehlen ist mir klar geworden nachdem das ding nicht so funktioniert hat. aber ich finde es recht seltsam, weil ich dieses "falsche" script mindestens 4 X im archiv gefunden habe !!! und alle behaupteten es funktionere ohne zu er wähnen das die "" fehlen..
also du hast meine frage schon beantwortet...
ich muss den inhalt "auslagern". an dieser stelle möchte fragen ob es sinnvoll wäre solche inhalte in unsichtbare felder statt in variablen zu schreiben.
ich frage deshalb weil ich diese methode für ein anderes problem anwenden würde ich mir aber nicht über die auswirkungen auf das "ganze" sicher bin.
danke
BuG
Hi ich bins noch mal
Ich hab mal versucht so ein kleines "Layerproblem" zu basteln. Dabei ist mir aufgefallen, dass die ganze Geschichte gar nicht so einfach ist. Der Grund ist der, dass bei der Loesung des Reloadproblems immer dieselbe Seite wieder geladen wird (mit window.history.go(0); ) Alle darauffolgenden Befehle (z.B lade in layerX den InhaltY oder mache layerZ unsichtbar) scheinen davor ausgefuehrt zu werden (oder gar nicht mehr) und bringen deshalb keine Loesung des Problems. Auch eventuell veraenderte Variablen haben ja bekanntlich nach dem Laden einer neuen Seite wieder ihre urspruenglichen Werte :-((
Aber wie so oft gibt es auch hier eine Loesung des Problems: Das einzige, was nach dem Laden einer Seite erhalten bleibt ist der Fenstername. Deshalb kann man ueber diesen auch Variableninhalte uebergeben. In meinem folgenden kleinen Beispiel wird je nach Fenstername ein anderer Layer in den Vordergrund geschaltet. Das fuehrt dazu, dass auch nach einem reload der zuletzt aktive Layer im Vordergrund bleibt. (Ich hoffe mich haut keiner wegen des langen Beispiels)
<html>
<head>
<title>Layerprobleme</title>
<script language="JavaScript">
<!--
var hilfe=1;
for (k=1;k<4;k++){
if (window.name==k) hilfe=k;
}
if(!window.saveInnerWidth)
{ window.onresize = resizeIt;
window.saveInnerWidth = window.innerWidth;
window.saveInnerHeight = window.innerHeight; }
function resizeIt()
{ if (saveInnerWidth < window.innerWidth
saveInnerWidth > window.innerWidth
saveInnerHeight > window.innerHeight
saveInnerHeight < window.innerHeight )
{ window.name=hilfe; window.history.go(0); }}
function Layerwechsel(i) {
if (document.layers){
for (j=1;j<4;j++)
document.layers[j].visibility="hide";
document.layers[i].visibility="show";
hilfe=i;
}
return
}
//-->
</script>
</head>
<body text="#000000" onload="Layerwechsel(hilfe)" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
<div id="layer1" style="position:absolute; top:10px; left:10px; width:300px; height:200px; visibility:visible;z-index:1;">
<table width=300 height=200 border=0 cellspacing=0 cellpadding=0 bgcolor=#009900>
<tr><td align=center>
<table width=154 height=104 border=0 cellspacing=0 cellpadding=0 bgcolor=black>
<tr><td>
hi
</td></tr></table>
</td></tr></table>
</div>
<div id="layer2" style="position:absolute; top:60px; left:85px; width:150px; height:100px; visibility:hidden; z-index:10;">
<table width=150 height=100 border=0 cellspacing=0 cellpadding=0 bgcolor=blue><tr><td align=center>
Inhalt von Layer1<br>
Inhalt von Layer1<br>
Inhalt von Layer1<br>
</td></tr></table>
</div>
<div id="layer3" style="position:absolute; top:60px; left:85px; width:150px; height:100px; visibility:hidden; z-index:10;">
<table width=150 height=100 border=0 cellspacing=0 cellpadding=0 bgcolor=red><tr><td align=center>
Inhalt von Layer2<br>
Inhalt von Layer2<br>
Inhalt von Layer2<br>
</td></tr></table>
</div>
<div id="layer4" style="position:absolute; top:60px; left:85px; width:150px; height:100px; visibility:hidden; z-index:10;">
<table width=150 height=100 border=0 cellspacing=0 cellpadding=0 bgcolor=00ccff><tr><td align=center>
Inhalt von Layer3<br>
Inhalt von Layer3<br>
Inhalt von Layer3<br>
</td></tr></table>
</div>
<div id="Menue" style="position:absolute; top:60px; left:15px; width:50px; height:100px; z-index:100;">
<table width=60 height=100 bgcolor="#330099"><tr><td align=center>
<a href=# onclick="Layerwechsel(1);return false;">Layer1</a>
<a href=# onclick="Layerwechsel(2);return false;">Layer2</a>
<a href=# onclick="Layerwechsel(3);return false;">Layer3</a>
</td></tr></table>
</div>
</body>
</html>
Da du aber wahrscheinlich mehrere Variablen oder unsichtbare Felder uebergeben willst hier noch ein sehr hilfreicher link zum Thema Variablen ueber Fenstername uebergeben:
http://www.teamone.de/selfaktuell/wertueb.htm#a2
viele Gruesse Holger
Moin!
Zur zweiten Frage: Es fehlt nicht eine Klammer, sondern die oder Zeichen. Also:
function resizeIt()
{ if (saveInnerWidth < window.innerWidth
saveInnerWidth > window.innerWidth
saveInnerHeight > window.innerHeight
saveInnerHeight < window.innerHeight )
{ window.history.go(0); }}
Das Problem ist, dass der Schwanzabschneider bei seiner Arbeit alle Pipe-Zeichen entfernt, deshalb tauchen die nie im Archiv auf. Also hier nochmal fuer's Archiv:
function resizeIt()
{ if (saveInnerWidth < window.innerWidth XX
saveInnerWidth > window.innerWidth XX
saveInnerHeight > window.innerHeight XX
saveInnerHeight < window.innerHeight )
{ window.history.go(0); }}
Beim Abschreiben muss man nun jedes X durch ein Pipe-Zeichen (der senkrechte Strich) ersetzen.
Calocybe