对于reasons,我需要解析看起来像查询字符串的格式(即key=value&another_key=another_value
),但它位于URL片段中,例如:
http://example.com/callback#id_token=my_long_jwt&state=some_state
如果#
是?
,那么使用<?>
会很容易,但是我不知道如何(或是否)可以使用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)
但是Url.Parser.Query
中没有运行Url.Parser.Query.Parser
的API,我可以在String
中运行Callback
。
答案 0 :(得分:4)
Url解析器仅将Url片段视为String
,但您可以在解析之前将#
替换为?
:
Maybe.withDefault url <| Url.fromString <| String.replace '#' '?' <| Url.toString url
然后,您将在查询部分获得您的片段,以便您可以正常解析它。