I'm trying to log items inserted into localStorage via the dot accessor using Chromium.
But i'm getting this error when using Reflect.get() method.
Uncaught TypeError: Illegal invocation
here's my script
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,
});
Expected result: window.localStorage.myItem = 'some-value' should log the value and a stack trace
This script is used with Tampermonkey on Chromium v74 (should be fine, supported by Chrome 49 and above).
How can I resolve this ?