Reflect.get() using a proxy = error illegal invocation

Viewed 448

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 ?

0 Answers
Related