Cheatah: onResize=document.refresh() ?

Hi,

dieses Problem wird für einige sicherlich keines sein, jedenfalls hoffe ich das :-)

Ich habe einen Frame, indem (konkret) Werbung dargestellt wird, und zwar zwei Banner nebeneinander. Jetzt möchte ich dafür sorgen, daß nur ein Banner dargestellt wird, wenn die innere Breite eine bestimmte Grenze unterschreitet. Das ist bis hierhin trivial: Defaultbreite definieren, je nach document.layers oder .all die Breite herausfinden, je nach Breite das zweite Banner darstellen oder nicht.

Schwierig wird es aber bei einem Resize. Ich möchte, daß beim Verändern der Fenstergröße die Seite neu aufgebaut wird. Dazu sind mir zwei (suboptimale) Lösungen eingefallen:
a) <body onResize=location.reload()> - ich möchte aber die Seite nicht vom Server neu anfordern...
b) Komplette Ausgabe in einer JavaScript-Funktion, die sowohl in Laufzeit als auch onResize aufgerufen wird. Das ist aber noch schlimmer, weil ich dann den ganzen Code noch einmal in einem <noscript>-Bereich brauche. Außerdem halte ich nicht viel davon, eine Seite komplett per JavaScript zu schreiben.

Leider gibt es offenbar kein document.refresh() o.ä. (oder finde ich es nur nicht?). Gibt es eine ähnliche Lösung, die eben einfach nur die Seite reinitialisiert?

Danke,

Cheatah

  1. Hi,

    dieses Problem wird für einige sicherlich keines sein, jedenfalls hoffe ich das :-)

    Ich habe einen Frame, indem (konkret) Werbung dargestellt wird, und zwar zwei Banner nebeneinander. Jetzt möchte ich dafür sorgen, daß nur ein Banner dargestellt wird, wenn die innere Breite eine bestimmte Grenze unterschreitet. Das ist bis hierhin trivial: Defaultbreite definieren, je nach document.layers oder .all die Breite herausfinden, je nach Breite das zweite Banner darstellen oder nicht.

    Schwierig wird es aber bei einem Resize. Ich möchte, daß beim Verändern der Fenstergröße die Seite neu aufgebaut wird. Dazu sind mir zwei (suboptimale) Lösungen eingefallen:
    a) <body onResize=location.reload()> - ich möchte aber die Seite nicht vom Server neu anfordern...
    b) Komplette Ausgabe in einer JavaScript-Funktion, die sowohl in Laufzeit als auch onResize aufgerufen wird. Das ist aber noch schlimmer, weil ich dann den ganzen Code noch einmal in einem <noscript>-Bereich brauche. Außerdem halte ich nicht viel davon, eine Seite komplett per JavaScript zu schreiben.

    Leider gibt es offenbar kein document.refresh() o.ä. (oder finde ich es nur nicht?). Gibt es eine ähnliche Lösung, die eben einfach nur die Seite reinitialisiert?

    beim ersten Mal muß das doch sowieso JavaScript sein. Setz' alles in eine Function und ruf' die über onLoad und über onResize auf.

    1. Hi Kai,

      b) Komplette Ausgabe in einer JavaScript-Funktion, die sowohl in Laufzeit als auch onResize aufgerufen wird. Das ist aber noch schlimmer, weil ich dann den ganzen Code noch einmal in einem <noscript>-Bereich brauche. Außerdem halte ich nicht viel davon, eine Seite komplett per JavaScript zu schreiben.

      beim ersten Mal muß das doch sowieso JavaScript sein. Setz' alles in eine Function und ruf' die über onLoad und über onResize auf.

      nun, bisher habe ich es etwa so:

      <table><tr>
        <td>Werbung 1</td>
        <script>
          document.write.eventuell('<td>Werbung 2</td>'); // Pseudocode ;-)
        </script>
      </tr></table>

      Scripts innerhalb von Tabellen sind zwar nicht so prall, aber naja. Auf diese Weise habe ich so ziemlich alles abgedeckt:

      • Innerhalb des Scripts wird geprüft ('.eventuell'), ob die Werbung angezeigt werden soll.
      • Bei ausreichender Breite wird eben angezeigt.
      • Bei fehlendem/ausgeschaltetem JavaScript wird vorsichtshalber nicht angezeigt - ich brauche dazu nicht mal ein <noscript>.

      Wenn ich alles mit JavaScript ausgebe, muß ich die gesamte Tabelle (und das ist ein bißchen mehr als da steht *g*) mit JavaScript ausgeben, wenn ich mich nicht irre den <body> noch dazu - und ich brauche danach noch einen <noscript>-Teil mit exakt demselben Code. Änderungen müssen also doppelt gemacht werden. Außerdem kann ein kleiner Fehler in der Interpretation (bei JS ja nichts ungewöhnliches) dafür sorgen, daß gar nichts mehr angezeigt wird.

      Ich danke Dir trotzdem für die Anregung. Mittlerweile hat Christine mir aber die Scheuklappen abgenommen und mich auf die Lösung gestoßen :-)

      Cheatah

  2. Hallo,

    Ich habe einen Frame, indem (konkret) Werbung dargestellt wird, und zwar zwei Banner nebeneinander. Jetzt möchte ich dafür sorgen, daß nur ein Banner dargestellt wird, wenn die innere Breite eine bestimmte Grenze unterschreitet.

    [...]

    Schwierig wird es aber bei einem Resize. Ich möchte, daß beim Verändern der Fenstergröße die Seite neu aufgebaut wird. Dazu sind mir zwei (suboptimale) Lösungen eingefallen:
    a) <body onResize=location.reload()> - ich möchte aber die Seite nicht vom Server neu anfordern...

    reload() fordert nicht neu an.
    Zumindest sagt Netscape:
       location.reload([true])
       Parameters
       true forces an unconditional HTTP GET of the document from the server...

    Also theoretisch sollte ohne (true)  der Server aussen vor bleiben.
    Allerdings habe ich da so meine ganz praktischen Bedenken, eigentlich weniger, dass auch ohne (true) vom Server geholt wird, sondern eher, dass die Seite trotz (true) aus dem Cache oder vom Proxy kommt.
    An sich sollen hier naemlich die Usereinstellungen im Browser ebenso wirken wie sonst auch, also - immer / 1x pr Sitzung / nie -. Nur, das haut ja auch nicht hin.

    Aber, das war eigentlich mehr nebenbei.
    Du willst ja, dass _nicht_ geholt wird.
    Dann muesste reload() oder von mir aus history.go(0) - das nehme ich meistens - klappen.

    b) Komplette Ausgabe in einer JavaScript-Funktion, die sowohl in Laufzeit als auch onResize aufgerufen wird. Das ist aber noch schlimmer, weil ich dann den ganzen Code noch einmal in einem <noscript>-Bereich brauche. Außerdem halte ich nicht viel davon, eine Seite komplett per JavaScript zu schreiben.

    Nein, finde ich auch nicht so toll.

    Willst Du noch 'ne Idee?
    Layer benutzen, je nach Fenstergroesse positionieren, wenn zu klein, einen unsichtbar machen.
    Einen davon muesste man per Javascript ausgeben, damit ohne JS und mit aelteren Browsern wenigstens einer zu sehen ist.
    Aufwendig? Ja.
    Notwendig? Wohl nein, es sei denn, man schiesst gern mit  Kanonen auf Spatzen. <g>

    Spass beiseite, ich halte die Loesung von oben fuer praktikabel.

    Christine

    1. Hi Christine,

      Du bist genau die Person, von der ich mir eine Antwort erhofft hatte ;-)
      Der Tip mit history.go(0) ist Gold wert, klappt hervorragend. Hätte ich eigentlich auch selber drauf kommen können, aber das sagt sich hinterher einfach... Danke! ;o)

      reload() fordert nicht neu an.
      Zumindest sagt Netscape:
         location.reload([true])
         Parameters
         true forces an unconditional HTTP GET of the document from the server...

      Also theoretisch sollte ohne (true)  der Server aussen vor bleiben.

      Hm. Mein OmniHTTPd-Logfile führte die Datei immer schön neu auf, und auch im Internet-Test dauerte es relativ lange bis die Datei wieder da war. Das Logfile habe ich da zwar nicht geprüft, aber naja.

      Willst Du noch 'ne Idee?
      Layer benutzen, je nach Fenstergroesse positionieren, wenn zu klein, einen unsichtbar machen.
      Einen davon muesste man per Javascript ausgeben, damit ohne JS und mit aelteren Browsern wenigstens einer zu sehen ist.
      Aufwendig? Ja.
      Notwendig? Wohl nein, es sei denn, man schiesst gern mit  Kanonen auf Spatzen. <g>

      Das denke ich allerdings auch... :-) Ne, folgendes trifft es schon ganz gut:

      Spass beiseite, ich halte die Loesung von oben fuer praktikabel.

      Genau. Nochmals danke!

      Cheatah