Stefan: Fenster bei Mausklick schließen

Hallo,

und wieder ein Javascript-Problem:

Ich öffne mit dem Aufruf:

<a href="javascript:Fenster('images/Alcatraz_002.jpg')">

die Funktion

function Fenster(URL) {
  var x = screen.width;
  var y = screen.height;
  Bild = window.open(URL,"","fullscreen=no,width=x,height=y,scrollbars,status=no,location=no,menubar=no,toolbar=no,resizable=yes");
  Bild.focus();
  }

Damit öffnet sich ein neues maximiertes Fenster, in dem ein Bild angezeigt wird. Nun möchte ich aber, dass bei einem Mausklick irgendwo in dem Fenster das Fenster wieder geschlossen wird ohne dass der User das x von Windows anklicken muss.
´
Hat jemand eine Idee, wie ich das in diesem Kontext hinbasteln kann? Mein Versuch mit Bild.onmousedown = Bild.close(); schließt das Fenster direkt wieder ohne zu warten... Geht das überhaupt ohne statt dem Bild eine weitere html-Seite zu öffnen?

Stefan

  1. Hallo Stefan,

    Ich öffne mit dem Aufruf:
    <a href="javascript:Fenster('images/Alcatraz_002.jpg')">
    die Funktion

    schlechter Ansatz. Wer ohne Javascript unterwegs ist, hat keine Chance, das Bild zu sehen. Besser:

    <a href="images/Alcatraz_002.jpg" onclick="Fenster(this.href); return (false)">

    Wer kein Javascript ausführen kann/will, hat damit wenigstens einen normal funktionierenden Link, während für die JS-Surfer durch das return (false) die Bearbeitung der Link-Funktion unterdrückt wird und nur noch der JS-Funktionsaufruf zum Tragen kommt.

    Die Problematik von Popup-Blockern, die inzwischen ja weit verbreitet sind, hast du bedacht?

    function Fenster(URL) {
      var x = screen.width;
      var y = screen.height;
      Bild = window.open(URL,"","fullscreen=no,width=x,height=y,scrollbars,status=no,location=no,menubar=no,toolbar=no,resizable=yes");
      Bild.focus();
      }

    Ist es Zufall, dass Bild dadurch ein global verfügbares Objekt wird (was es ja sein muss, wenn du nachher wieder darauf zugreifen willst), oder hast du da tatsächlich darüber nachgedacht?  ;-)

    Mein Versuch mit Bild.onmousedown = Bild.close(); schließt das Fenster direkt wieder ohne zu warten...

    Natürlich, du rufst ja auch die close()-Methode des Fensters direkt auf. Der Eventhandler erwartet aber einen String, in dem die entsprechende Anweisung steht, oder?

    Geht das überhaupt ohne statt dem Bild eine weitere html-Seite zu öffnen?

    Ich weiß es nicht. Deine Idee erscheint mir raffiniert, aber ich bin mir nicht sicher, ob das bei einem Fenster möglich ist, das kein HTML-Dokument enthält. Korrigiere deinen Fehler mit dem Eventhandler und probiere es in einigen repräsentativen Browsern aus...

    Schönen Tag noch,

    Martin

    --
    Frauen sind wie Elektrizität: Fasst man sie an, kriegt man eine gewischt.
    1. Hallo Stefan,

      Ich öffne mit dem Aufruf:
      <a href="javascript:Fenster('images/Alcatraz_002.jpg')">
      die Funktion

      schlechter Ansatz. Wer ohne Javascript unterwegs ist, hat keine Chance, das Bild zu sehen. Besser:

      <a href="images/Alcatraz_002.jpg" onclick="Fenster(this.href); return (false)">

      Das habe ich natürlich auch eingebaut, nur der Übersicht wegen nicht gepostet. Der komplette Aufruf sieht so aus:

      <a href="javascript:Fenster('images/Alcatraz_002.jpg')">
      <img border="0" src="images/Alcatraz_002_tn.jpg" alt="Alcatraz, San Francisco, Kalifornien" width="300" height="225"></a>
      <a href="images/Alcatraz_002.jpg" target="_blank" width="100%"><img border="0" src="images/magnify.png" align="right"></a><br>
      <h2>&quot;The Rock&quot; von Pier 39 aus gesehen (373kb).</h2>

      Damit haben alle Nicht-JS-Benutzer die Möglichkeit, das Bild über den magnify-Button zu öffnen. Ausgiebige Versuche mit der oben genannten Methode (this.href etc.) haben in meinen Testumgebungen nicht zu 100% funktioniert (liegt vielleicht auch an diversen Virenchecker, Firewalls, Adblockern - aber die haben die Surfer ja mitunter auch). Deshalb benutze ich jetzt diese getrennte Methode.

      Die Problematik von Popup-Blockern, die inzwischen ja weit verbreitet sind, hast du bedacht?

      Das klappt ja dann mit dem Button :)

      Ist es Zufall, dass Bild dadurch ein global verfügbares Objekt wird (was es ja sein muss, wenn du nachher wieder darauf zugreifen willst), oder hast du da tatsächlich darüber nachgedacht?  ;-)

      Sagen wir mal so: derzeit brauche ich es eigentlich nicht global, aber man weiss ja nie was ich noch so bastel und wofür es gut sein wird ;)

      Mein Versuch mit Bild.onmousedown = Bild.close(); schließt das Fenster direkt wieder ohne zu warten...

      Natürlich, du rufst ja auch die close()-Methode des Fensters direkt auf. Der Eventhandler erwartet aber einen String, in dem die entsprechende Anweisung steht, oder?

      Hmm, ja dann muss ich wohl was mit event basteln...

      Geht das überhaupt ohne statt dem Bild eine weitere html-Seite zu öffnen?

      Ich weiß es nicht. Deine Idee erscheint mir raffiniert, aber ich bin mir nicht sicher, ob das bei einem Fenster möglich ist, das kein HTML-Dokument enthält. Korrigiere deinen Fehler mit dem Eventhandler und probiere es in einigen repräsentativen Browsern aus...

      Ich versuchs mal. Danke für die Antwort :)

      Stefan

      1. Hi,

        Das habe ich natürlich auch eingebaut, nur der Übersicht wegen nicht gepostet. Der komplette Aufruf sieht so aus:

        <a href="javascript:Fenster('images/Alcatraz_002.jpg')">
        <img border="0" src="images/Alcatraz_002_tn.jpg" alt="Alcatraz, San Francisco, Kalifornien" width="300" height="225"></a>
        <a href="images/Alcatraz_002.jpg" target="_blank" width="100%"><img border="0" src="images/magnify.png" align="right"></a><br>
        <h2>&quot;The Rock&quot; von Pier 39 aus gesehen (373kb).</h2>

        Hast recht, das sieht ein wenig unübersichtlich aus. Trotzdem frage ich mal: Warum _zwei_ Links? Ein einziger (so wie ich es angedeutet hatte) würde genügen. Der könnte dann das Bild (Thumbnail) _und_ den Text umschließen. Denn das Pseudo-Protokoll "javascript:" im href-Attribut sollte man, wenn möglich, vermeiden.

        Damit haben alle Nicht-JS-Benutzer die Möglichkeit, das Bild über den magnify-Button zu öffnen. Ausgiebige Versuche mit der oben genannten Methode (this.href etc.) haben in meinen Testumgebungen nicht zu 100% funktioniert (liegt vielleicht auch an diversen Virenchecker, Firewalls, Adblockern - aber die haben die Surfer ja mitunter auch). Deshalb benutze ich jetzt diese getrennte Methode.

        Hmm. Eigentlich habe ich mit dieser Kombination bisher gute Erfahrungen gemacht, und sie wird in dieser oder ähnlicher Form auch hier im Forum immer wieder von verschiedenen Leuten empfohlen.

        Mein Versuch mit Bild.onmousedown = Bild.close(); schließt das Fenster direkt wieder ohne zu warten...

        Natürlich, du rufst ja auch die close()-Methode des Fensters direkt auf. Der Eventhandler erwartet aber einen String, in dem die entsprechende Anweisung steht, oder?

        Hmm, ja dann muss ich wohl was mit event basteln...

        Nö, wieso denn? Dein Ansatz mit Bild.onmousedown war doch im Prinzip nicht schlecht. Nur solltest du dem einen String mit der Anweisung zuweisen, nicht das Funktionsergebnis der close()-Methode.
        Übrigens hätte ich eher den onclick-Handler genommen; das ist aber von der Sache her egal.

        Viel Spaß noch beim Probieren...

        PS: Wenn du eine größere Sammlung von SF/California-Bildern hast, bin ich mal sehr gespannt. Ich schwärme nämlich auch für die Gegend und war schon ein paarmal da. :-)

        --
        Lebensmotto der Egoisten: Was ist so schlimm daran, dass jeder nur an sich selbst denkt? Dann ist doch an alle gedacht!
        1. Hallo,

          PS: Wenn du eine größere Sammlung von SF/California-Bildern hast, bin ich mal sehr gespannt. Ich schwärme nämlich auch für die Gegend und war schon ein paarmal da. :-)

          ich hab gerade mal deine verlinkte Seite aufgerufen und mich erinnert, dass du im Zusammenhang mit dieser Website vor einiger Zeit schon mal irgendwas hier gefragt hast. Ich habe mich damals schon für deine Bildersammlung begeistert!

          Ciao,

          Martin

          --
          Das Gehirn ist schon eine tolle Sache: Es fängt ganz von allein an zu arbeiten, wenn man morgens aufsteht, und hört erst damit auf, wenn man in der Schule ankommt.
            (alte Schülererkenntnis)
          1. ich hab gerade mal deine verlinkte Seite aufgerufen und mich erinnert, dass du im Zusammenhang mit dieser Website vor einiger Zeit schon mal irgendwas hier gefragt hast. Ich habe mich damals schon für deine Bildersammlung begeistert!

            :) Das hört man immer gerne! Mein Webprojekt ist auch noch lange nicht fertig, ich habe rund 3.600 Bilder auf Lager, deren Menge beim nächsten Urlaub natürlich wieder deutlich anwachsen wird. Da ist die Bildanzeigeroutine natürlich sehr elementar.

            Stefan

    2. Mein Versuch mit Bild.onmousedown = Bild.close(); schließt das Fenster direkt wieder ohne zu warten...

      Natürlich, du rufst ja auch die close()-Methode des Fensters direkt auf. Der Eventhandler erwartet aber einen String, in dem die entsprechende Anweisung steht, oder?

      Nein, ein Eventhandler erwartet eine Funktionsreferenz.
      In dem falle geht z.b.

      Bild.onclick = Bild.close;

      Struppi.

      1. Nein, ein Eventhandler erwartet eine Funktionsreferenz.
        In dem falle geht z.b.

        Bild.onclick = Bild.close;

        Danke für den Hinweis :)
        Mein Problem ist offenbar ein ganz anderes haha. Im Mozilla klappt das alles wunderbar, im IE passiert nix, und mit dem habe ich herumexperimentiert. Da dieser aber vom Virenchecker eingeschränkt ist dürfte dies die Erklärung sein :) Ich probiere das mal auf einem anderen PC ohne diese Absicherungen! Da kann ich ja lange probieren haha :)

        Stefan

      2. Hallo,

        Natürlich, du rufst ja auch die close()-Methode des Fensters direkt auf. Der Eventhandler erwartet aber einen String, in dem die entsprechende Anweisung steht, oder?

        Nein, ein Eventhandler erwartet eine Funktionsreferenz.
        Bild.onclick = Bild.close;

        tschuldigung, das habe ich wohl mit den zugehörigen HTML-Attributen verwechselt, mit denen die Eventhandler eines Elements gesetzt werden können (wie z.B. <img [...] onclick="window.close()">).

        Ciao,

        Martin

        --
        Die letzten Worte der Challenger-Crew:
        Lasst doch mal die Frau ans Steuer!