T-Rex: wann greift ein Popupblocker

Moin,

Tjo ich würde gerne wissen wann ein Popupblocker greift und wie ich das unter "Umständen" umgehen kann?
Hintergrund ist ein Facebook Connect. Die Webseite wird verlassen, da man bei Facebook bestimmte Zugriffsrechte erlauben muss (oder eben auch nicht). Jetzt ist meine Idee, dass dieses Facebook Zugriffsrecht in einem Popupfenster abgefragt wird. Diese Methodik sieht man auch immer öfter bei anderen Webseiten.
Ich habe jedoch bedenken bezüglich Popupblocker. Wäre echt doof, wenn sich jemand bei meiner Webseite einloggen / registrieren will und ein Popupblocker verhindert dies.

Gruß
Antworten Antiblocker
T-Rex

  1. Hallo,

    Tjo ich würde gerne wissen wann ein Popupblocker greift und wie ich das unter "Umständen" umgehen kann?

    Ein Popup-Blocker greift üblicherweise, wenn window.open in einem Handler eines Events aufgerufen wird, welcher nicht vom User initiiert wurde.

    Wenn du window.open z.B. in einem normalen click-Handler aufrufst, sollte der Blocker nicht greifen.

    Hintergrund ist ein Facebook Connect. Die Webseite wird verlassen, da man bei Facebook bestimmte Zugriffsrechte erlauben muss (oder eben auch nicht). Jetzt ist meine Idee, dass dieses Facebook Zugriffsrecht in einem Popupfenster abgefragt wird.

    Das sollte kein Problem sein.

    Die Facebook-JavaScript-API macht das übrigens selbst, wenn du selbige und FB.login verwendest. Dann bekommst du die User-Daten samt Auth-Token in einem JavaScript-Callback.

    Wenn du sie serverseitig brauchst, dann ist ein klassischer serverseitiger OAuth-Prozess sinnvoller. Du öffnest z.B. eine Seite von dir im Popup, welche zur Facebook-Authentifizierung leitet. Facebook leitet dann zurück zu einer deiner Seiten, welche die Daten entgegennimmt und die Session erzeugt. Diese kann dann das Popup mit window.close wieder schließen und z.B. den opener (das öffnende Fenster) neu laden.

    Mathias

    1. Wenn du sie serverseitig brauchst, dann ist ein klassischer serverseitiger OAuth-Prozess sinnvoller. Du öffnest z.B. eine Seite von dir im Popup, welche zur Facebook-Authentifizierung leitet. Facebook leitet dann zurück zu einer deiner Seiten, welche die Daten entgegennimmt und die Session erzeugt. Diese kann dann das Popup mit window.close wieder schließen und z.B. den opener (das öffnende Fenster) neu laden.

      Genau so ist der Plan.

      Aber nochmal zurück zu dem Popupblocker.
      Ich nehme mal alles so an wie du gesagt hast. Das würde bedeuten, das sich den Popupblocker wie folgt umgehen kann:

      schleife die 100 mal läuft
      {
          create link
          link.href = irgendwas
          link.target = "_blank"
          link.click();
      }

      Das würde 100 Popups erzeugen, da kein window.open aufgerufen wurde?

      Gruß
      under Popup Erection
      T-Rex

      1. Ich nehme mal alles so an wie du gesagt hast. Das würde bedeuten, das sich den Popupblocker wie folgt umgehen kann:

        Nein. Der Browser merkt, dass das kein vom User ausgelöster Klick ist.

        Mathias

    2. Hi,

      Ein Popup-Blocker greift üblicherweise, wenn window.open in einem Handler eines Events aufgerufen wird, welcher nicht vom User initiiert wurde.

      eigentlich sollte er bei *jedem* Aufruf von window.open() eingreifen und ihn unterbinden - wenn die aktuell geladene Seite nicht in der Whitelist steht.

      Wenn du window.open z.B. in einem normalen click-Handler aufrufst, sollte der Blocker nicht greifen.

      Doch, sollte er. Sonst ist er nutzlos. Denn der Löwenanteil aller Popups kommt als Reaktion auf einen Klick. Auch den in Firefox integrierten Blocker finde ich nutzlos, solange er mit der Defaulteinstellung betrieben wird, wo Popups innerhalb von 2s nach einem Mausklick oder einem Tastendruck zugelassen werden. Dann kann ich auch gleich drauf verzichten. Erst nachdem ich diese Ausnahmen aus der Config gelöscht habe, hat der Blocker wirklich einen Sinn.

      Ein guter (d.h. wirksamer) Popup-Blocker sollte vielmehr die Methode window.open() durch eine interne Funktion ersetzen, die prüft, ob URL in der Whitelist aufgeführt ist, und falls ja, den Aufruf an die ursprüngliche Methode durchreicht, andernfalls einfach null zurückgibt.
      Außerdem sollte er den HTML-Quellcode oder das DOM nach target-Attributen durchkämmen und sie entfernen, es sei denn, sie verweisen auf bereits geöffnete Fenster (z.B. in Framesets).

      Keinesfalls sollte das Verhalten aber von irgendwelchen Events abhängig sein.

      So long,
       Martin

      --
      Wenn man keine Ahnung hat - einfach mal Fresse halten.
        (Dieter Nuhr, deutscher Kabarettist)
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. Wenn du window.open z.B. in einem normalen click-Handler aufrufst, sollte der Blocker nicht greifen.

        Doch, sollte er.

        Ich denke, hier liegt ein Missverständnis vor. Ich wollte keine Aussage darüber machen, was ich davon halte. Das Wort »sollte« war nicht gemeint im Sinne vom »so sollte es idealerweise sein«, sondern bloß eine Vorhersage des Browserverhaltens im Sinne »ich gehe davon aus, dass es sich so verhält«.

        Mathias