源码
// 监测 localStorage.setItem
// 保存原始的 setItem 方法
const originalSetItem = localStorage.setItem;
// 递归函数组装 url
const flattenAndCollectUrls = (menu) => {
let urls = [];
function recurse(items) {
items.forEach(item => {
item.menuUrl && urls.push(item.menuUrl); // 收集 menuUrl
if (item.children && item.children.length > 0) {
recurse(item.children); // 递归处理 children
}
});
}
recurse(menu);
return urls;
}
// 重写 setItem 方法
localStorage.setItem = function(key, value) {
// 调用原始的 setItem 方法以实际存储数据
originalSetItem.apply(this, arguments);
// 检查是否是写入 menuList 键
if (key === 'menuList' && value) {
const menuUrls = flattenAndCollectUrls(JSON.parse(value || '[]'));
localStorage.setItem('menuUrls', JSON.stringify(menuUrls));
}
};