- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 HTML LocalStorage 的网页。同时打开此页面的多个选项卡/窗口是很常见的。由于这些都使用相同的 LocalStorage,而 LocalStorage 不提供事务或类似功能,我想实现某种形式的互斥,以防止不同的选项卡/窗口以不受控制的方式覆盖彼此的数据。
我试着只端口 my test of the Burns/Lynch mutual exclusion algorithm只需将 boolean[] F
存储在 LocalStorage 中即可发送到浏览器。
在 FireFox 中一切正常,但 Chrome 允许平均大约 1.3 个进程(大多数只有一个,有时是两个,很少甚至是 3 个或更多)同时进入临界区,而 Internet Explorer 平均允许 2 个进程(主要是 1、2 或 3,有时甚至更多)。
自 algorithm has been proven correct而且我的实现非常简单,我已经测试了它,否则我能想出为什么会发生这种情况的唯一原因是在 Chrome 和 IE 中,我写入 LocalStorage 之间存在延迟一个选项卡/窗口以及新值何时在所有其他选项卡/窗口中可见。
这可能吗?如果是这样,是否有任何文件或对这些延误有任何保证?或者,更好的是,我可以使用某种“提交”或“flush()”调用来强制立即传播更改吗?
更新:
我整理了一下jsfiddle测试往返时间:
// Get ID
var myID;
id = window.localStorage.getItem("id");
if (id==1) { myID = 1; window.localStorage.setItem("id", 0); }
else { myID = 0; window.localStorage.setItem("id", 1); }
// Initialize statistics variables
var lastrun = (new Date()).getTime();
var totaldelay = 0;
var count = 0;
var checks = 0;
document.documentElement.innerHTML = "ID: "+myID;
// Method that checks the round-trip time
function check() {
window.setTimeout(check, 1); // Keep running
value = window.localStorage.getItem("state");
checks++;
if (value==myID) return;
window.localStorage.setItem("state", myID);
now = new Date().getTime();
totaldelay += now - lastrun;
count++;
lastrun = now;
document.documentElement.innerHTML = "ID: "+myID+"<br/>"+
"Number of checks: "+checks+"<br/>"+
"Number of round-trips: "+count+"<br/>"+
"Checks per round-trip: "+checks/count+"<br/>"+
"Average round-trip time:"+totaldelay/count;
}
// Go!
window.setTimeout(check, 1000);
如果我在两个不同的窗口中运行这个 fiddle ,我会在我打开的第二个窗口中得到以下数字:
Browser | Checks per round-trip | Average round-trip time
------------------+-----------------------+-------------------------
Firefox 24.3.0 | 1.00 | 6.1 ms
Chrome 46.0.2490 | 1.06 | 5.5 ms
IE 10 | 17.10 | 60.2 ms
最佳答案
事实证明,Internet Explorer 再次赢得有史以来最糟糕软件的竞争......
IE11 中实际上存在一个严重的错误(我也看到了 IE10 的问题),如果用户打开多个选项卡,基本上无法可靠地使用 LocalStorage:每个选项卡基本上都有自己的缓存版本存储位置以及该缓存和实际存储之间的同步充其量是不稳定的(如果它发生的话)。基本上永远不能依赖将数据发送到另一个选项卡/窗口。
这是官方错误报告:IE 11 - Local Storage - Synchronization issues
(当然,这只是 huge list of other issues with LocalStorage support in IE 之一)
我很喜欢这个 issue 在 2013 年的打开方式,甚至得到了承认,但仍未得到修复......
不幸的是,发布的三个解决方法都没有使我的测试变得更好。
换句话说:在IE10/11中基本不可能使用LocalStorage进行跨tab/window通信。
令人惊讶的是,跨窗口/标签的 cookie 同步似乎更加稳定(至少在我使用 IE10 的测试中)。所以也许这可以用作解决方法。
关于html - HTML LocalStorage 中的数据在其他窗口/选项卡中可用所需的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33309497/
我是 Angular 新手。使用 $localstorage(ngStorage) 是否有任何特定的原因而不是常规的 javascript localstorage 有什么区别。 谁能给我解释一下吗?
这个问题说明了一切。我意识到所有选项都可以在最新的浏览器中使用,但是语义上最好的选择是什么?为什么? 最佳答案 根据 W3C 标准,正确的是 window.localStorage,因为 localS
我想不出一个好的标题,所以希望可以。 我正在做的是创建一个离线 HTML5 webapp。 “出于某些原因”我不希望将某些文件放在缓存 list 中,而是希望将内容放在 localStorage 中。
我最近问了a question about LocalStorage .使用 JSON.parse(localStorage.item) 和 JSON.parse(localStorage['item
我最近问了a question about LocalStorage .使用 JSON.parse(localStorage.item) 和 JSON.parse(localStorage['item
我最近问过a question about LocalStorage 。使用 JSON.parse(localStorage.item) 和 JSON.parse(localStorage['item
我在将本地存储的定价添加到其他字段时遇到问题。如果我将 beforeNoonNPSlot 的价格设置为 2,但我将 matineeNPSlot 的字段留空(它应该保留分配给的任何价格)最后)。然后在我
我需要从 localStorage 对象变量中删除对象键而不从 localStorage 中删除键 let obj = localStorage; let keys = Object.keys(loc
根据我所读到的内容,我希望以下代码能够工作。 此代码是函数的一部分,该函数应该通过用下一个更高的 localStorage 变量覆盖它来删除 localStorage 变量。一旦没有更多内容可供复制,
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: JavaScript property access: dot notation vs. brackets? 我是
编写localStorage['key'] = value或localStorage.setItem('key', value)有区别吗? 我看到了this question标记为重复,但在开发人员工
我一直在做以下事情: var store = window.localStorage; store.setItem() 但现在我看到代码是这样做的: localStorage.setItem() 两者
我在 Chrome 上遇到此错误。不知道为什么会发生。任何帮助!我正在使用 Backbone.localStorage 插件和 Backbone。我在以下行中收到错误: localStorage: B
如果我尝试以下代码: var c = new Backbone.Collection(); c.localStorage = new Backbone.LocalStorage("items");
我想使用 localStorage 存储用户输入值,然后在倒计时器中使用该值。 这是用户输入数据的 HTML: Work Time
我有一个适用于 Mac 和 Linux 用户但不适用于 Windows 用户的 Chrome 扩展程序。当我进入控制台并在 localStorage 中设置一个项目时,它工作正常,但是当用户尝试使用扩
在这里浏览所有问题/答案,但找不到解决我的问题的方法。条件('localStorage' in window)返回 true但是 localStorage 的对象本身仍然是 undefined . 设
使用下面的代码,我创建一个 localstorage 变量,如果未定义,则其键为 quote = 1。然而,当最终使用相同的引号键再次调用它时,即使使用了 Number() 函数,它也会变成 11 而
我上次检查时,以下两行返回 true: null == localStorage["foo"]; null == localStorage.getItem("foo"); 将 null 替换为 und
我正在尝试在 NextJS 静态站点上使用 localStorage,但遇到 localStorage 未定义错误。 我的错误显示组件的代码是: export default function Cat
我是一名优秀的程序员,十分优秀!