Показать сообщение отдельно
  #7 (permalink)  
Старый 14.11.2021, 21:05
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,565

Вот так должно работать:
function findLodashAndReplaceGet(registry) {
  for(const key in registry) {
    const module = registry[key]?.exports
    if(module && module._ && module._.VERSION === module.VERSION) {
      module.get = ((g) => (...args) => {
        if(args[1] === 'nativeEvent.isTrusted')
          return true

        return g(...args);
      })(module.get);
    }
  }
}

findLodashAndReplaceGet(C._registry);

function setValue(element, value, options) {
  if(typeof element === 'string') 
    element = document.querySelector(element);

  options = Object.assign({
    bubbles: true
  }, options);

  element.dispatchEvent(new Event('focus', options));
  element.dispatchEvent(new Event('keydown', options));
  element.dispatchEvent(new Event('keypress', options));
  
  element.value = value;
  
  element.dispatchEvent(new Event('input', options));
  element.dispatchEvent(new Event('keyup', options));
  element.dispatchEvent(new Event('change', options));
  element.dispatchEvent(new Event('blur', options));

  return element;
}


setValue('#id_password', 'New Value')

Функция findLodashAndReplaceGet должна выполняться один раз(но не критично). Она подменяет get в lodash таким образом что получение isTrusted всегда выдаёт true.
Спасибо им за то что потроха своего кода раскрывают в голобал, иначе было бы чутка по-сложнее.)
__________________
29375, 35

Последний раз редактировалось Aetae, 14.11.2021 в 21:14.
Ответить с цитированием