diff --git a/CHANGES.md b/CHANGES.md index c6e915e9b6..e4ba5c770b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -19,6 +19,7 @@ * Compiler: fix free variables pass wrt parameters' default value (#1521) * Compiler: fix free variables for classes * Compiler: fix internal invariant (continuation) +* Lib: Url.Current.set_fragment need not any urlencode (#1497) # 5.4.0 (2023-07-06) - Lille diff --git a/lib/js_of_ocaml/url.ml b/lib/js_of_ocaml/url.ml index 1be4dfe656..a9791f34ef 100644 --- a/lib/js_of_ocaml/url.ml +++ b/lib/js_of_ocaml/url.ml @@ -309,20 +309,12 @@ module Current = struct else l##.search) let get_fragment () = - (* location.hash doesn't have the same behavior depending on the browser - Firefox bug : https://bugzilla.mozilla.org/show_bug.cgi?id=483304 *) - (* let s = Js.to_bytestring (l##hash) in *) - (* if String.length s > 0 && s.[0] = '#' *) - (* then String.sub s 1 (String.length s - 1) *) - (* else s; *) - Js.Opt.case - (l##.href##_match (new%js Js.regExp (Js.string "#(.*)"))) - (fun () -> "") - (fun res -> - let res = Js.match_result res in - Js.to_string (Js.Unsafe.get res 1)) - - let set_fragment s = l##.hash := Js.bytestring (urlencode s) + let s = Js.to_bytestring l##.hash in + if String.length s > 0 && Char.equal s.[0] '#' + then String.sub s 1 (String.length s - 1) + else s + + let set_fragment s = l##.hash := Js.bytestring s let get () = url_of_js_string l##.href