将压缩状态存储在“#”之后的 URL 中

Storing compressed state in URL after `#`

本文关键字:之后 URL 压缩 状态 存储      更新时间:2023-09-26

我的JavaScript代码将其状态存储在一个小的键值字典中:

var my_state = { foo: "bar", baz: "quo" }; // It is a bit longer than that. :-)

我想将此状态存储在页面的 URL 中:

http://example.com/page.html#state=eyBmb286ICJiYXIiLCBiYXo6ICJxdW8iIH0K

我希望压缩该状态,以便 URL 会更短。

我该怎么做?

最好,压缩代码会意识到它正在为 URL 组件进行压缩,并且会选择字母表,以便不必对结果进行编码。(不需要进一步了解历史 API — 有导演。

使用 stringify 和 base64 编码怎么样?

var my_state = { foo: "bar", baz: "quo" };
var s1 = JSON.stringify(my_state);
var s2 = btoa(s1);
console.log(s2);
// result: eyJmb28iOiJiYXIiLCJiYXoiOiJxdW8ifQ==

但是 btoa 方法仅在 Chrome/Mozilla 中可用,看看这个问题来找到一个跨浏览器的 base64 库:如何在 JavaScript 中将字符串编码为 Base64?