2017-04-08 2 views
1

Ich implementiere soziale Auth. Wenn der Benutzer auf eine Schaltfläche klickt, sende ich einen Befehl, damit ich window.open() aufrufen kann.Aufruf von window.open über Port

bei diesem Aufruf-Stack suchen, können wir sehen, dass in der nächsten Ereignisschleife die Port-Handler aufgerufen wird: allow enter image description here

Da window.open nicht innerhalb des Click-Ereigniszyklus genannt wird, Browser wie Safari nicht damit das Popup angezeigt wird.

Was ist Ihr Ansatz?

+0

Konnte man ein [iframe] (http://package.elm-lang.org/packages/elm-lang/html/2.0.0/Html#iframe) Overlay in Elm erstellen, wobei die src auf die entsprechende Anmeldung eingestellt war Seite? –

+0

@SimonH nah, es ist ein [Sicherheitsproblem] (http://Stackoverflow.com/a/9089070/592641) – Birowsky

+0

Verwenden Sie eine Art von Ereignis Batch-Framework? Der Aufruf von window.open über einen Port in einem Klick-Handler funktioniert normal. – dta

Antwort

4

Es ist nicht super hübsch, aber man kann es ist eine hinterhältige Art und Weise zu handhaben dies so etwas wie

a 
    [ Html.Attributes.attribute "onClick" "window.open(this.href, this.target, 'width=800,height=600'); return false;" ] 
    [ text "Click me" ] 
+0

bis wir die Kontrolle darüber haben, ob der Befehl auf die nächste Ereignisschleife warten soll, ist dies der einfachste Weg – Birowsky

0

tun, und nicht 100% genau in Zukunft Ulme Releases weiter zu arbeiten garantiert, aber ich habe diese mehr getan in einer Klemme als einmal:

https://medium.com/@prozacchiwawa/the-i-m-stupid-elm-language-nugget-7-8d3efd525e3e

eine Eigenschaft Getter auf dem DOM-Knotentyp kann durch einen Handhabungs json Decoders während Ereignis ausgelöst werden. Sie können den gewünschten Code als Nebeneffekt des Zugriffs ausführen. Das Objekt, auf das der json-Decodierer zugreift, ist das reale Ereignisobjekt auf dem Ereignisbehandlungsstapel, wie es jetzt ist.