我正在尝试在我的websharper-app中获得适当的后按钮支持。我可以把东西放在历史上很好:
type MyRecord = { foo: int; bar: string }
JS.Window.History.PushState({foo=10; bar="hello"}, "", "mysuffix")
我希望通过这样的操作来为onpopstate
添加相应的处理程序:
JS.Window.Onpopstate <- (fun e -> Javascript.Console.Info e.State.bar)
不幸的是,此事件具有类型Js.Window.Onpopstate : Dom.Event -> Unit
即使相应的"真实" JavaScript事件确实可以,Dom.Event
也没有恢复状态的字段State
。
如何访问Onpopstate
处理程序中使用PushState
的状态?
您可以使用动态操作员?
:
JS.Window.Onpopstate <- (fun e ->
Console.Info e?state.bar
)
但是,您仍然需要使用[<Inline>]
调用任意方法。
事实证明,您可以从任意JavaScript中检索值:
[<Inline "$e.state">]
let stateOf (e : JavaScript.Dom.Event) =
Unchecked.defaultof<MyRecord>
我现在可以写我的onpopstate
处理程序:
JS.Window.Onpopstate <- (fun e ->
Javascript.Console.Info ((stateOf e).bar)
)
警告是提供嵌套的记录,类式参数,并将设置为PushState
一般不起作用。浏览器有义务仅存储任何您传递给 PushState
的json serializable部分;并且所有提到的类型均被实现为JavaScript对象。