通过端口调用window.open

时间:2017-04-08 14:48:19

标签: elm

我正在实施社会认证。当用户点击按钮时,我发送一个命令,以便我可以拨打window.open()

看看这个调用堆栈,我们可以看到在下一个事件循环中调用了端口处理程序: enter image description here

由于未在点击事件生命周期内调用window.open,因此像safari这样的浏览器不允许显示弹出窗口。

你的方法是什么?

2 个答案:

答案 0 :(得分:6)

这不是很漂亮,但你可以做类似

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

答案 1 :(得分:1)

这是一种处理这种问题的一种卑鄙的方式,并不是100%严格保证在未来的榆树版本中继续工作,但我已经不止一次地完成了这项工作:

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

DOM节点类型的属性getter可以在事件处理期间由json解码器触发。您可以运行所需的任何代码作为访问它的副作用。 json解码器正在访问的对象是事件处理器堆栈上的真实事件对象。现在就是这样。