Wie kann ich eine Funktion bei onload / onresize nur einmal ausführen lassen ?

Krischan

Grünschnabel
Hallo liebe Leute,
ich hab hier folgende Situation: Ich habe eine Seite mit einem iframe mit folgendem script:

Code:
<script language="javascript" type="text/javascript">
    function resize_me(n){
            d=40;
             ifObj=document.getElementsByName(n)[0];
             p=(document.all)?'scroll':'offset';
      eval("ifObj.style.height=Math.max(200,window.frames[n].document.getElementsByTagName('body')0]."+p+"Height+"+d+")+'px'");
                }
</script>
mit dem die Höhe des iframes an die geladene Seite angepasst wird.
Dazu auf den geladenden Seiten folgenden code:
HTML:
<body onload = "parent.resize_me('iframe');">
<script language="javascript" type="text/javascript">
function Reload()
{
  parent.resize_me('iframe') ;  
}
window.onresize = Reload; 
    </script>
Das funktioniert meistens auch problemlos, nur bei einigen (wenigen) Fensterbreiten kommt es zu einer 'Endlosschleife' ->
es wird ständig ein vertikaler Scrollbalken ein-/ausgeblendet, der iframe-Inhalt verspringt einige pixel nach oben / unten..
ein resize um wenige pixel beendet diese Schleife dann.
Daher meine Frage: (Wie) ist es möglich die Funktion bei jedem onload/onresize nur einmal ausführen zu lassen?

Schönen Sonntag - Gruß Krishan
 
Wo wird dann der Inhalt der Variable überprüft, in der Funktion? Da bleibt es doch aber bei der Endlosschleife.

Was passiert wenn du nicht window.onresize sondern window.onload nimmst, dieses Ereignis sollte nur einmal ausgelöst werden.

Oder aber die Größe des IFrames mit Hilfe von CSS steuern.
 
Was passiert wenn du nicht window.onresize sondern window.onload nimmst, dieses Ereignis sollte nur einmal ausgelöst werden.
Ja super das klappt - beim Laden des iframes bei 'kritischer' Fensterbreite wird keine Endlosschleife mehr ausgelöst.
Mit folgender 'suboptimaler' Konstruktion:
Code:
<script language="javascript" type="text/javascript">
function Reload()
{
  parent.resize_me('iframe') ;  
  delay (100000000);
}

function Resize()
{
 document.location.reload(true) ;
  
}

window.onload = Reload;
window.onresize = Resize;
 </script>

funktioniert die Höhenanpassung auch bei einem resize - vielleicht gibt es eine Möglichkeit onresize nur bei einem horizontalen resize auszuführen?
Oder aber die Größe des IFrames mit Hilfe von CSS steuern.
Damit bin ich an einer browser-übergreifenden Lösung gescheitert ..

Vielen Dank Gruss Krishan
 
Also mit folgendem script wird jetzt onresize nur bei horizontalem resize ausgeführt, so daß bei der vertikalen Höhenanpassung keine Endlosschleife mehr enstehen kann.
Code:
<script  language="javascript" type="text/javascript">
function Reload()
{
  parent.resize_me('iframe') ;  
  }
 window.onload = Reload; 

 width = $(window).width(); 
function Resize()
{
	if ($(window).width()!=width){
parent.resize_me('iframe') ; 
width = $(window).width();
}
 }
 window.onresize = Resize ;
</script>

Gruß Krishan
 
Zuletzt bearbeitet:
Zurück