相关疑难解决方法(0)

本地存储与Cookie

我希望通过将所有cookie移动到本地存储来减少我的网站上的加载时间,因为它们似乎具有相同的功能.除了明显的兼容性问题之外,使用本地存储替换cookie功能是否有任何优点/缺点(特别是在性能方面)?

html cookies httprequest local-storage

969
推荐指数
9
解决办法
32万
查看次数

如何让JS变量在页面刷新后保留值?

是否可以永久更改javascript变量?如同,如果我设置变量X并使其等于1.然后单击按钮将该变量更改为2.如何在刷新页面时将该变量保持为2?

html javascript

116
推荐指数
3
解决办法
20万
查看次数

HTML5本地存储后备解决方案

我正在寻找可以localStorage在没有本机支持的浏览器上模拟的JavaScript库和代码.

基本上,我想使用localStorage存储数据编码我的网站,并知道它仍然适用于本机不支持它的浏览器.这意味着库将检测是否window.localStorage存在并且如果存在则使用它.如果它不存在,那么它将通过在window.localStorage命名空间中创建自己的实现来创建某种本地存储的回退方法.

到目前为止,我已经找到了这些解决方案:

  1. 简单的sessionStorage实现.
  2. 使用cookie的实现(对此想法不感兴趣).
  3. Dojo的dojox.storage,但这是它自己的事情,而不是真正的后备.

我知道Flash和Silverlight也可以用于本地存储,但是没有找到任何使用它们作为标准HTML5 localStorage的后备.也许谷歌Gears也有这个功能?

请分享您找到的任何相关库,资源或代码段!我对纯javascript或基于jquery的解决方案特别感兴趣,但我猜这不太可能.

javascript flash jquery html5 local-storage

113
推荐指数
5
解决办法
6万
查看次数

检查localStorage是否可用

我知道有很多关于检查的问题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)

javascript error-handling local-storage

67
推荐指数
5
解决办法
7万
查看次数

LocalStorage无法在iPad和iPhone上运行

我在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.而且,我的设置是基本默认设置.

谢谢.

iphone html5 local-storage ipad ios

12
推荐指数
1
解决办法
2万
查看次数

如何在 Safari 10+ 中使用 BroadcastChannel API 或类似的东西?

问题:

我需要一个客户端 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)

javascript safari local-storage broadcast-channel

12
推荐指数
1
解决办法
8104
查看次数

我可以在茉莉花单元测试中伪造存储事件吗?

我将需要处理一些存储事件.

window.addEventListener('storage', listener);
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用jasmine对我的代码进行单元测试.

简单地在测试中localStorage使用某些东西是setItem(key, value)行不通的,因为根据设计,不会为事件的发起者引发事件.

使用$(window).trigger('storage'...似乎是一个好主意,但我不认为这是正确的.

我看过帖子询问如何模拟本地存储,spyOn但我找不到任何处理事件.

javascript

3
推荐指数
1
解决办法
1476
查看次数