Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

修改隐身模式下对storage的处理 #17

Closed
wants to merge 6 commits into from

Conversation

cbbfcd
Copy link
Contributor

@cbbfcd cbbfcd commented Dec 19, 2018

修改:

  1. 通过IIFE,在初始加载过程中判断在隐身模式下是否可以使用localStorage的存储API,不支持的话就通过内部维护的一个对象来实现存储,并实现key,getItem等方法,上次的实现少了 storage.length,storage.key

2.删除每次setItem的时候进行超出容量限制的检测,因为超出的话本身就是会抛出异常,用户可以通过这个异常信息对症下药。

主要分为两种情况:

1. 比如在开启隐身模式情况下,```localStorage```的大小被设置为0,这样使用 ```setItem```去存储数据是会报错的,采取的是通过检测该种情况,然后采取用一个缓存对象去代替内存,并重写```setItem```, ```getItem```等 API 进行hack的方式解决。

2. 在正常情况下,浏览器是有大概 5 M 的```localStorage```使用空间(不同浏览器不同),如果存的东西比较多,就存在超出内存空间的情况,这种情况只能通过每一次执行 ```setItem```的时候去判断是不是超出内存限制了,这里使用了兼容的判断方式,不只是通过```e.name```去判断,如果出现这种错误就给用户一个提示,这里还可以继续完善就是可以让用户传一个回调,在超出内存限制的时候可以去删除一些不重要的数据进而释放空间(当然也可以直接 clear)。
@jaywcjlove
Copy link
Owner

Coverage Status
@cbbfcd 我这边已经将代码覆盖率,整到 95% 了,你的代码,需要添加一些测试。

npm run watch # 实时编译 main.js
npm run test:watch # 监听代码改变运行测试用例

根目录会生成 coverage 目录,打开 coverage/lcov-report/index.html 可以看那行代码没有测试到。

@cbbfcd
Copy link
Contributor Author

cbbfcd commented Dec 19, 2018

好的,我想想怎么去测试这种情况。

@cbbfcd
Copy link
Contributor Author

cbbfcd commented Dec 19, 2018

暂时先增加了一个简单的超限的测试用例,隐身模式下用对象来hack的方法测试报错太多,我还没来的及排查。怀疑是原型上的一些bug。所以暂时还原了大部分代码

@jaywcjlove jaywcjlove closed this Mar 29, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants