我希望通过将所有cookie移动到本地存储来减少我的网站上的加载时间,因为它们似乎具有相同的功能.除了明显的兼容性问题之外,使用本地存储替换cookie功能是否有任何优点/缺点(特别是在性能方面)?
是否可以永久更改javascript变量?如同,如果我设置变量X并使其等于1.然后单击按钮将该变量更改为2.如何在刷新页面时将该变量保持为2?
我正在寻找可以localStorage在没有本机支持的浏览器上模拟的JavaScript库和代码.
基本上,我想使用localStorage存储数据编码我的网站,并知道它仍然适用于本机不支持它的浏览器.这意味着库将检测是否window.localStorage存在并且如果存在则使用它.如果它不存在,那么它将通过在window.localStorage命名空间中创建自己的实现来创建某种本地存储的回退方法.
到目前为止,我已经找到了这些解决方案:
我知道Flash和Silverlight也可以用于本地存储,但是没有找到任何使用它们作为标准HTML5 localStorage的后备.也许谷歌Gears也有这个功能?
请分享您找到的任何相关库,资源或代码段!我对纯javascript或基于jquery的解决方案特别感兴趣,但我猜这不太可能.
我知道有很多关于检查的问题localStorage但是如果有人在浏览器中手动关闭它会怎么样?这是我用来检查的代码:
localStorage.setItem('mod', 'mod');
if (localStorage.getItem('mod') != null){
alert ('yes');
localStorage.removeItem('mod');
} else {
alert ('no');
}
Run Code Online (Sandbox Code Playgroud)
功能简单,有效.但是,如果我进入我的Chrome设置并选择"不保存数据"选项(我不记得它的确切名称),当我尝试运行此功能时,我什么也得不到Uncaught Error: SecurityError: DOM Exception 18.那么有没有办法检查这个人是否完全关闭了?
更新:这是我尝试的第二个功能,我仍然没有得到任何响应(警报).
try {
localStorage.setItem('name', 'Hello World!');
} catch (e) {
if (e == QUOTA_EXCEEDED_ERR) {
alert('Quota exceeded!');
}
}
Run Code Online (Sandbox Code Playgroud) 我在iPad和iPhone上遇到了HTML5 LocalStorage的问题.我开发了一个HTML5/CSS3/JavaScript(jQuery/jQuery Mobile)网站,我试图将几个数据存储到LocalStorage(只是几个小字符串).
当我通过简单地打开Safari并输入URL导航到iPad或iPhone上的网站时,我从Moderizr收到不支持localstorage的通知,因此,我的值不会保存在设备上.
但是,如果我使用"保存到主屏幕"选项,请在主屏幕上保存图标/链接到我的移动网站,关闭"常规"Safari,然后使用主屏幕图标打开应用程序,Moderizr告诉我本地存储可用,以及我的值是按预期编写和读取的.
所以,我很困惑.为什么在将链接保存到主屏幕后它仍然有效但如果我直接在Safari中键入URL则无效?我是否缺少一些技巧让它在两种情况下都能正常工作?
我已尝试使用iOS 5.1.1和6.而且,我的设置是基本默认设置.
谢谢.
问题:
我需要一个客户端 Javascript 解决方案(jQuery 很好),其中一个浏览器窗口/选项卡中的事件可以广播到同一域上的其他窗口/选项卡。例如,如果购物车在选项卡 A 中更新,选项卡 B 和 C 会收到通知,因此我们可以更新页面上的一些信息,或通知用户页面已过时,或类似的事情。
我试过的:
该广播信API符合我的需要,但在IE 11或Safari不起作用。
所以我尝试了这个 polyfill,这样我就可以在任何地方使用 BroadcastChannel API。它在 IE 中有效,但在 Safari 中无效(我相信 BroadcastChannel 仍未定义)。
然后我尝试了sysend.js,它使用 BroadCastChannel 如果它可用,否则使用localStorage. 他们的演示页面在 Safari 中运行良好,但在我的网站上,我发现它在 Safari 9 中运行,但在 10-12 中不起作用(使用 BrowserStack 和一台运行 Safari 12 的真实 Mac 进行测试)。调试他们的脚本,似乎在不同选项卡中更改时应该触发的存储事件localStorage根本不会触发。但这实际上只是当您document.domain设置时才出现问题,我就是这样做的。
我相信这与这个旧的 Chrome 错误相同。但是 Chrome 在 2012-2017 年就有这个问题,而 Safari 显然是在 2017 年左右引入的?
我还没有发现其他人在 Safari 中讨论这个错误,但我可以很容易地证明这一点。打开两个使用相同document.domain值的选项卡并运行这些脚本:
选项卡 A:
$(window).on("storage", function (e) …Run Code Online (Sandbox Code Playgroud) 我将需要处理一些存储事件.
window.addEventListener('storage', listener);
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用jasmine对我的代码进行单元测试.
简单地在测试中localStorage使用某些东西是setItem(key, value)行不通的,因为根据设计,不会为事件的发起者引发事件.
使用$(window).trigger('storage'...似乎是一个好主意,但我不认为这是正确的.
我看过帖子询问如何模拟本地存储,spyOn但我找不到任何处理事件.