【问题标题】:Can I infer the availability of sessionStorage from testing localStorage?我可以通过测试 localStorage 来推断 sessionStorage 的可用性吗?
【发布时间】:2017-04-18 04:59:04
【问题描述】:

如果我要在用户浏览器中使用 JavaScript 测试 localStorage,例如

var hasStorage = (function() {
    try {
        localStorage.setItem(mod, mod);
        localStorage.removeItem(mod);
        return true;
    } catch (exception) {
        return false;
    }
}());

if (hasStorage) {
    // store things in places
}

(来自:https://mathiasbynens.be/notes/localstorage-pattern

我是否可以推断(无需明确检查)如果hasStorage === true,那么sessionStorage 也可用,或者是否可以禁用另一个启用另一个?

【问题讨论】:

  • localStorage 可以在 Chromium 上禁用。没有禁用sessionStorage 的选项。如果有的话,推断是如果localStorage 被禁用,sessionStorage 也将被禁用。这可以通过使用 chromium-browser --disable-local-storage 标志启动然后尝试设置 sessionStorage 在 chromium 上进行验证
  • @blex 在同一兼容性表中 firefox 有相反的支持顺序。虽然可以假设在正常操作中两者都存在,但没有规范可以保证这种假设。所以,为了安全起见,最好将它们视为独立的实体。
  • 有趣的是,启动了带有--disable-local-storage标志的铬,sessionStorage仍然被定义,试图设置localStorage记录Uncaught TypeError: Cannot read property 'setItem' of null

标签: javascript html local-storage session-storage


【解决方案1】:

localStorage 似乎与铬的sessionStorage 无关。可以使用 --disable-local-storage 标志启动 chromium,该标志在尝试设置 localStorage 时会记录错误

Uncaught TypeError: Cannot read property 'setItem' of null

虽然似乎没有官方标志可以在铬 List of Chromium Command Line Switches 上禁用 sessionStorage。请注意,chrome 是使用 chromium 源代码构建的。

【讨论】:

  • 这很有趣。我可能误读了,但您的研究是否也表明如果localStorage is 可用(即没有像您显示的那样标记/禁用),那么sessionStorage 也将尽可能可用' t(从链接的规范中可以看出)被禁用,所以测试不需要为两者重新运行?
  • sessionStorage 可以被禁用 stackoverflow.com/questions/17882647/… 。建议检查每个。
猜你喜欢
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 2017-11-16
  • 2016-01-01
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多