Skip to content

Commit

Permalink
支持storage iframe global 本地存储
Browse files Browse the repository at this point in the history
  • Loading branch information
pearone committed Mar 19, 2024
1 parent 7419adb commit 58efe79
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 3 deletions.
2 changes: 1 addition & 1 deletion packages/event/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dpdfe/event-utils",
"version": "0.0.38",
"version": "0.0.39",
"description": "通用方法",
"author": "pearone",
"homepage": "https://github.com/DPDFE/react-layout/tree/main/packages/event",
Expand Down
2 changes: 1 addition & 1 deletion packages/event/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export {
number2Chinese
} from './data';

export { default as LocalStorage } from './localstorage';
export { default as LocalStorage, ExpireLocalStorage } from './localstorage';

export { default as Events } from './eventbus';

Expand Down
45 changes: 44 additions & 1 deletion packages/event/src/localstorage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ const LocalStorage = (
// 注册所有 storage 初始值
return new Proxy<typeof storage>(storage, {
get(target: typeof storage, key: string): any {
// ensureKeyRegistered(key);
ensureKeyRegistered(key);
return is_in_open_service_iframe
? global_local_storage[key]
: getStorageItem(key);
Expand All @@ -121,6 +121,7 @@ const LocalStorage = (

deleteProperty(target: typeof storage, key: string): boolean {
ensureKeyRegistered(key);
/** 处理iframe访问storage时,没有权限的情况 */
if (is_in_open_service_iframe) {
delete global_local_storage[key];
} else {
Expand All @@ -130,4 +131,46 @@ const LocalStorage = (
}
});
};

/** expire local storage */
const expire_local_storage =
// @ts-ignore
(window.global_local_storage.expire_local_storage ?? {}) as Record<
string,
any
>;

// @ts-ignore
window.global_local_storage.expire_local_storage = expire_local_storage;

// 设置携带过期时间的localStorage
export const ExpireLocalStorage = {
setItem: function (key: string, value: any, expire: number) {
const data = {
value: value,
expire: new Date().getTime() + expire
};
if (is_in_open_service_iframe) {
expire_local_storage[key] = JSON.stringify(data);
} else {
localStorage.setItem(key, JSON.stringify(data));
}
},

getItem: function (key: string) {
const res = is_in_open_service_iframe
? expire_local_storage[key]
: localStorage.getItem(key);
if (res) {
const data: { value: any; expire: number } = JSON.parse(res);
// 如果没有超时的话
if (data.expire > new Date().getTime()) {
return data.value;
}
}

return undefined;
}
};

export default LocalStorage;

0 comments on commit 58efe79

Please sign in to comment.