Blog

Umgehen von Popup-Blockern mit window.open() in Flex

ShriKant Vashishtha

ShriKant Vashishtha

Aktualisiert Oktober 23, 2025
3 Minuten

Es ist schon ein paar Jahre her, als ich das letzte Mal mit Javascript gearbeitet habe. Die Dinge haben sich in der Zwischenzeit stark verändert und eines der Dinge, die uns Menschen immer gefallen, ist die Einführung von Popup-Blockern in der Browserwelt. Ich hoffe, Sie erinnern sich noch an die alten Zeiten, als es lästig war, all diese ungebetenen Fenster zu schließen. Jetzt leben wir in einer relativ friedlichen Welt. Aber manchmal möchten wir auch aus legitimen Gründen neue Fenster öffnen. Als ich also die Aufgabe hatte, ein neues Browserfenster auf Knopfdruck zu öffnen, entdeckte ich die Probleme, die Popup-Blocker mit sich bringen. Das Interessante daran ist, dass das Verhalten von window.open() bei verschiedenen Browsern und Popup-Blockern unterschiedlich sein kann.

Eines der Dinge, die allen Browsern gemeinsam sind, ist, dass Popup-Fenster durch eine Benutzeraktion wie einen Klick auf eine Schaltfläche, einen Link usw. geöffnet werden sollten. Popup-Blocker blockieren fast immer Fenster, die ohne Benutzeraktionen geöffnet werden. Das finde ich gut, denn sonst könnten Spammer Dutzende von Fenstern öffnen, ohne Sie zu fragen. In Flex stellte dies jedoch ein kleines Problem für mich dar. Ich wollte ein Fenster öffnen, nachdem ich einige Backend-Dienste aufgerufen hatte. Da Antworten (Ergebnisse von Webservices), die von Flex-Ereignissen kommen, immer asynchron sind, war es einfach nicht möglich, das Fenster nach einer Backend-Interaktion zu öffnen. Ich musste einige meiner Entwürfe ändern. Ein weiteres Problem waren die unterschiedlichen Verhaltensweisen von Browsern. In einigen Browsern funktioniert die Flex-basierte ExternalInterface.call()-Methode und in anderen navigationToURL(). Bei der Lösung dieses Problems stieß ich auf einen guten Link (mehtanirav.com/2008/11/27/opening-external-links-in-new-window-from-as3), der die meisten Probleme mit window.open() in verschiedenen Browsern löst. Safari stellt eine weitere Herausforderung dar, wenn es um die Verwendung der Funktion window.focus() geht. In vielen Situationen möchten Sie ein einziges benanntes Fenster öffnen (wichtig aus Sicht der Benutzerfreundlichkeit). Wenn Sie dasselbe Fenster für eine neue URL verwenden, möchten Sie vielleicht den Fokus mit der Funktion window.focus() auf das verlassende Fenster legen. Safari unterstützt die Funktion window.focus() nicht. Ich habe versucht, eine geeignete Alternative zu finden, aber nichts hat funktioniert, außer das Fenster wie folgt zu schließen und erneut zu öffnen:


var newwindow = '';
function popitup(url) {
  if (!newwindow.closed && newwindow.location) {
  newwindow.close();
  newwindow=window.open(url,'name'+Math.random(),'height=600,width=800');
  }
  sonst {
  newwindow=window.open(url,'name','height=600,width=800');
  if (!newwindow.opener) newwindow.opener = self;
  }
  return false;
}

Bitte beachten Sie, dass ich jedes Mal, wenn ich ein Fenster schließe, einen neuen Fensternamen verwendet habe. Auch in Safari kann man das gleichnamige Fenster nach dem Schließen nicht wieder öffnen. Ich habe auch die folgenden Hinweise verwendet, die mir geholfen haben.

Verfasst von

ShriKant Vashishtha

Contact

Let’s discuss how we can support your journey.