AngularJs 应用程序无法监听来自另一个窗口的 localStorage 更改

Posted

技术标签:

【中文标题】AngularJs 应用程序无法监听来自另一个窗口的 localStorage 更改【英文标题】:AngularJs app cannot listen to localStorage changes from another window 【发布时间】:2017-06-14 13:14:38 【问题描述】:

在我的 AngularJS 应用程序中,两个窗口通过 localStorage 进行通信,以便使用单个 websocket 连接。主窗口侦听来自服务器的消息,将传入数据放入 localStorage 属性。子窗口在此属性上使用角度 $watch 将传入数据放入网格中。要求使用不同的窗口和单个连接。

问题是在浏览器开发工具(F12)没有打开之前,子窗口的控制器似乎无法观察到localStorage属性。

我该如何解决这个问题?

【问题讨论】:

对不起,如果这个问题很愚蠢;但是两个窗口是否来自同一来源? 您如何管理您的存储空间?你在使用 ngStorage 吗?或者直接js存储 可以分享$watch函数 @aorfevre:是的,子窗口可以从主窗口内的按钮打开并指向同一个原点。是的,我正在使用 ngStorage 库。 【参考方案1】:

我有一个 Angular 项目,也使用 localstorage 和 localforage.js。不过,这句话确实将您的问题缩小到了开发工具上,不是吗?:

“直到浏览器开发工具(F12)没有打开。”

确保未选中此框。

重新加载页面并重试。

或者你可以试试这个解决方案:Using localstorage checks in a different window using window.postMessage()

我们的 QA 团队报告了几个错误,原因是使用本地存储打开了两个窗口,因此数据访问必须紧密同步。因此子窗口会将数据发送给处理本地存储的父窗口。

【讨论】:

谢谢,但取消选中“禁用检查”不起作用。我会更好地解释:当我打开子窗口时,网格被 localStorage 中的数据填充,但它无法获取更新。然后,如果我打开开发者工具,它就会开始获取更新。然后,如果我失去了子窗口的焦点,它就不会得到更新。如果我重新打开开发者工具,它会再次开始工作。 你有没有和这里提到的一样的错误?:***.com/a/42975984/6254070你使用的是哪个浏览器?

以上是关于AngularJs 应用程序无法监听来自另一个窗口的 localStorage 更改的主要内容,如果未能解决你的问题,请参考以下文章

拦截另一个窗口的窗口消息

如何监听来自第 3 方 DLL 的表单的“Form.Shown”和“Window.Closing”?

来自另一个类的 Qt 方法调用?

在 Java 中没有焦点的情况下监听输入

Java,设置监听器,打开一个窗口,窗口中有个按钮,怎样在这按钮中再设置个监听器,打开另一个窗口?

AngularJS 测试 - 来自服务的承诺无法解决