Как определить, была ли исправлена ​​ошибка, связанная с повреждением ввода в браузере Edge - PullRequest
0 голосов
/ 12 сентября 2018

Недавно в браузере Edge была ошибка с элементами <option> с пропущенным атрибутом value.

<select name="qty">
  <option>1</option>
  <option>2</option>
</select>

Затронутые браузеры Edge вводят случайные символы в данные формы: qty=1Q или qty=2Җ или хуже qty=29

В июле Microsoft исправила их проблему #1747791 в июльском обновлении RS4 для Windows 10, kb4338819 .С этим исправлением они не увеличивали номер версии браузера 17.17134.Вместо этого они увеличили номер сборки операционной системы до 17134.165

Приложение, которое я поддерживаю, продолжает получать сообщения об ошибках от пользователей со старыми версиями Edge.Я хотел бы обнаружить пользователя с уязвимым браузером и отобразить предупреждение.

Неработающие и исправленные версии Edge сообщают об одном и том же номере версии в строке UserAgent, 17.17134.Есть ли другой способ обнаружить сборку Edge или номер сборки ОС?

Как определить, была ли исправлена ​​ошибка повреждения ввода в браузере Edge?

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

Обходным путем может быть создание функции JavaScript для определения браузера Edge и его версии, пока пользователь открывает сайт.

Если это проблемная версия, сообщите пользователю об использовании другого браузера и не разрешайте дальнейшее взаимодействие.

Если это любая другая версия Edge, разрешите пользователю использовать сайт.

Привет

Дипак

0 голосов
/ 19 сентября 2018

Адаптированное решение от @ charlietfl

Скрытый iframe представляется только тогда, когда у пользователя есть уязвимый пользовательский агент.Сегодня это включает современные браузеры Edge, но в октябре версия в UserAgent должна снова увеличиться.

Вместо того, чтобы взаимодействовать с родительским окном, iframe открывает страницу, которая может получить доступ к сеансу пользователя.Он представляет HTML-форму типа, затронутого ошибкой, и немедленно публикует себя.Данные POST проверяются на предмет повреждения, и результаты становятся доступными для пользовательского сеанса.

Довольно очевидный javascript (с jquery) выглядит примерно так:

  % if ( $do_check ) {
    <iframe id="edge_browser_check_iframe" style="display:none;"></iframe>
    <script type="text/javascript">
      if ( /Edge\/17\.17134/.test( navigator.userAgent )) {
        $("#edge_browser_check_iframe").attr(
          'src',
          'edge_browser_check-iframe.html'
        );
      }
    </script>
  % }
0 голосов
/ 12 сентября 2018

Первое, что я хотел бы сделать, - это пропустить аудит value на <option>, используя javascript, если это является причиной проблемы, как кажется, упоминается в ссылке, которую вы разместили.

Затем, если у вас нетодин из способов проверить различия в пользовательском агенте - это программно (javascript) отправить внеэкранную форму на экран или скрытую цель iFrame при обнаружении этого пользовательского агента.

Это будет сделанопри загрузке страницы без взаимодействия с пользователем

Затем проверьте сторону сервера и верните страницу в iframe с помощью вызова postMessage(), который сообщит родительской странице, существует ли проблема или нет.

Потребуется также прослушиватель события postMessage в родительском объекте.

Как форма, так и iframe могут быть вставлены в dom с использованием скрипта по мере необходимости

...