我试图在我的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
并且Dom.Event
没有字段State
来取回州,即使相应的&#34;真实&#34; Javascript事件。
如何在PushState
处理程序中访问与Onpopstate
一起存储的状态?
答案 0 :(得分:2)
您可以使用动态运算符?
:
JS.Window.Onpopstate <- (fun e ->
Console.Info e?state.bar
)
但请注意,您仍然需要使用[<Inline>]
来调用任意方法。
答案 1 :(得分:0)
事实证明,您可以从任意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可序列化部分;刚才提到的所有类型都是作为Javascript对象实现的。