localStorage事件侦听器不会在Chrome中为本地文件触发
我需要在更改localStorage
时收到通知。 此代码在Firefox 24中运行良好,但在Chrome 29(或30)或IE 10中不起作用。它也适用于实时服务器,但在我使用本地文件进行测试时( file:///
) 。
这是代码:
Index $(document).ready(function() { $('#submit').click(function() { console.log('Clicked'); if($('#username').val() != "") localStorage.setItem('someItem', 'someValue'); }); $(window).bind('storage', function(e) { alert('change'); }); }); Click me
这在Chrome中有什么问题? 我根据需要打开两个标签。
它只会在“其他”选项卡/窗口中触发事件,但不会在更改数据的情况下触发(这在您的问题中有点不清楚,所以如果我误解,请纠正我)。
当在与本地存储区域相关联的存储对象x上调用setItem(),removeItem()和clear()方法时,如果方法执行了某些操作,则在Window对象的localStorage属性的Storage对象的每个Document对象中都是如果与x相同的存储区域相关联,则必须触发存储事件,如下所述。
来源W3C
根据评论更新以完成答案:
如果页面由于安全原因从文件协议( file:///
)运行,则某些浏览器会有限制。
在Chrome中,您可以通过提供参数--allow-file-access-from-files
来覆盖它:
chrome.exe --allow-file-access-from-files
我不确定你是否可以和其他浏览器做类似的事情。 我建议使用本地服务器(例如Mongoose )进行测试,以免在实时场景中遇到任何意外。