Есть ли какой-нибудь способ обнаружить изменения в консоли (Devtools)?

#javascript #console #devtools

#javascript #консоль #devtools

Вопрос:

я ищу ответы на свой вопрос. И я не могу найти ни одного. Так что в качестве примера:

 this.connect = false;

if (this.connect) {
  alert('CONNECTED');
}
  

Если я изменю this.connect = true в моем devtools -> консоль. Это должно привести к появлению предупреждающего сообщения «ПОДКЛЮЧЕНО».

Есть ли какой-нибудь способ сделать это? Будет здорово заставить это работать!

Комментарии:

1. я думаю, вы могли бы использовать прокси обходным путем — но, только если this есть window , потому что this в консоли есть window

2. Не могли бы вы привести какой-нибудь пример? Я никогда не использую Прокси.

3. на самом деле, ответ jns не использует прокси, и его гораздо проще понять новичку

Ответ №1:

Редактировать: Прокси не нужен. Просто используйте defineProperty, чтобы определить метод получения / установки для подключенного свойства окна.

Эй, взгляните на этот фрагмент — думаю, это хороший способ начать.

 // We are using a property _connected to store the value of the connected property
let _connected = false;

// We are defining a property with the name 'connected' on the this (this = globalThis = window => console dev tool)
Object.defineProperty(this, 'connected', {
  get: () => _connected,
  set: (value) => {
    _connected = value;
    console.log(`Setting 'connected' to: ${value}`);
  }
});

// Try using this.connected = $val inside your console.
this.connected = true;
this.connected = false;
this.connected = "foo";  


Использование прокси, подобного предложенному @Jaromanda X, также возможно, но я думаю, что это не лучшее решение, потому что перезапись window / this / globalThis — scope кажется невозможной:

 const _this = new Proxy(window, {
  set: (target, key, value) => {
      if (key === "connected")
        console.log(`Setting 'connected' to set to ${value}`);
      target[key] = value;
      return true;
  }
});

_this.connected = true;
_this.connected = false;
_this.connected = "foo";   

Комментарии:

1. Я думаю, что this следует заменить на globalThis для кросс-платформенной поддержки.

2. Да, это был ответ. Я никогда не использовал defineProperty! Мне нужно больше посмотреть в этой теме! Спасибо за ваш ответ. Это оно! Люблю тебя <3