判断是否支持Web Storage
我需要验证 Web Storage API 是否受支持且可用(它可能由于安全问题而被禁用)。
因此,我认为检查 sessionStorage 或 localStorage 类型是否已定义就足够了:
if (typeof sessionStorage != 'undefined')
{
alert('sessionStorage available');
}
else
{
alert('sessionStorage not available');
}
但是,我想知道该类型是否可能存在,但无论如何我都无法使用 Web Storage API。
评论: 我知道如果禁用cookie并且访问sessionStorage或localStorage,Firefox会抛出安全错误。
I need to verify that Web Storage API is supported and available (it may be disabled due to security issues).
So, I thought it would suffice to check whether the type sessionStorage or localStorage is defined or not:
if (typeof sessionStorage != 'undefined')
{
alert('sessionStorage available');
}
else
{
alert('sessionStorage not available');
}
However, I was wondering if it could be possible that the type exists, but I wouldn't been able to use the Web Storage API anyway.
Remarks:
I know Firefox will throw a security error if cookies are disabled and sessionStorage or localStorage are accessed.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
为什么不使用 Modernizr 库来检测是否支持本地存储?浏览器之间的任何差异都会为您处理,然后您可以使用如下代码:
Why don't you use the Modernizr library to detect if local storage is supported or not? Any differences between browers will be taken care of for you, you can then just use code like this:
我认为你的原始代码走在正确的轨道上,不需要让它变得太花哨。
在代码中使用 KISS 原则,无需任何其他依赖项:
I think you're on the right track with your original code, no need to make this too fancy.
Using the KISS principle with no additional dependencies in your code:
因此,因为
Modernizr.localstorage
分别Modernizr.sessionstorage
将返回 true,而 Firefox 可能会与禁用的 Cookie(这将导致安全错误)或任何其他专有(意外)一起使用)可能会发生行为:我编写了自己的webStorageEnabled
函数,该函数似乎工作得很好。希望这对某人也有用。
So, because
Modernizr.localstorage
respectivelyModernizr.sessionstorage
will return true while Firefox might be used with disabled Cookies (which will lead into an security error) or any other proprietary (unexpected) behavior could occur: I've written my ownwebStorageEnabled
function which seems to work very well.Hope this will be useful for someone too.
我的版本(因为 IE 9 运行在 IE 8 以上的 Intranet 站点上已损坏)。
一个更长的版本,添加了 setObject 以允许存储对象:
My version (because IE 9 running in IE 8 more on an intranet site is broken).
a longer version that adds setObject to allow storing objects:
这是我使用会话存储(如果可用)的方法,如果不可用,请使用 cookie。
Here's what I do to use session storage if available if it's not, use cookies..