使用 Elm 解析片段内的查询字符串

duk*_*ave 4 url-parsing elm

由于某些原因,我需要解析看起来格式化为查询字符串(即key=value&another_key=another_value)但位于 URL 片段中的内容,例如:

http://example.com/callback#id_token=my_long_jwt&state=some_state

如果#是 a ?,那么使用它会很容易<?>,但我不知道Url.Parser.Query当它在片段中时如何(或是否)可以使用。


我可以将片段作为String

import Url.Parser as Parser
import Url.Parser exposing ((</>))

type Route = Callback String | NotFound

route : Parser.Parser (Route -> a) a
route = Parser.map Callback (Parser.s "callback" </> fragmentWithDefault )

fragmentWithDefault : Parser.Parser (String -> a) a
fragmentWithDefault = Parser.fragment <| Maybe.withDefault "no_fragment"

toRoute : Url.Url -> Route
toRoute url = Maybe.withDefault NotFound (Url.Parser.parse route url)
Run Code Online (Sandbox Code Playgroud)

但是没有可以Url.Parser.Query运行 a 的API Url.Parser.Query.Parser,我可以在其中运行Stringin Callback

Kar*_*ski 5

Url 解析器仅将 Url 片段视为 a String,但您可以在解析之前替换#为:?

Maybe.withDefault url <| Url.fromString <| String.replace '#' '?' <| Url.toString url
Run Code Online (Sandbox Code Playgroud)

然后你会在查询部分得到你的片段,这样你就可以正常解析它。