javascript - Reflect.get() 使用代理 = 错误非法调用
问题描述
我正在尝试使用 Chromium 通过点访问器记录插入到 localStorage 的项目。
但是我在使用 Reflect.get() 方法时遇到了这个错误。
Uncaught TypeError: Illegal invocation
这是我的脚本
const localStorageProxy = new Proxy(localStorage, {
get(target, name, receiver) {
// error here
const value = Reflect.get(target, name, receiver);
if (!['setItem', 'getItem', 'removeItem'].includes(name)) {
console.log(value);
console.trace();
}
return typeof value === 'function' ?
value.bind(target) :
value;
},
set(target, name, value, receiver) {
if (!['setItem', 'getItem', 'removeItem'].includes(name)) {
console.log(value);
console.trace();
}
if (name === 'setItem') {
return false;
}
// probably an error here too
return Reflect.set(target, name, value, receiver);
},
});
Object.defineProperty(window, 'localStorage', {
value: localStorageProxy,
configurable: true,
enumerable: true,
writable: false,
});
预期结果:window.localStorage.myItem = 'some-value' 应该记录值和堆栈跟踪
此脚本在 Chromium v74 上与 Tampermonkey 一起使用(应该没问题,受 Chrome 49 及更高版本支持)。
我该如何解决这个问题?
解决方案
推荐阅读
- python - 在 Colab TPU 上使用分布式策略训练模型
- macos - 在两台 Mac 上设置密钥后,Mac 使用 SSH 询问密码
- r - 按其值转换表中的列
- sql - Oracle SQL:如何使用“IN 或 NOT IN 或其他”关键字检查给定的员工 ID 列表中不存在哪些记录?
- javascript - 应用程序中的计数器未按预期运行
- javascript - VUEX Getter = 数组内的过滤器数组
- laravel - 如何在 laravel 项目中同时使用 web 的守卫和 api 的守卫?
- java - 最小的java文件
- python - 查找索引numpy python
- python - 用python点击iframe中的按钮