Обнаружение полной перезагрузки с помощью JavaScript - PullRequest
0 голосов
/ 04 января 2019

Для пояснения: Я не пытаюсь провести различие между обновлением и перезагрузкой, поэтому это не дубликат обновление против перезагрузки . Я пытаюсь выяснить, есть ли способ определить, когда пользователь запускает hard reload вместо обычной перезагрузки. Я спрашиваю, потому что я хочу выполнить некоторый код до hard только перезагрузки.


Используя JavaScript, с помощью кнопки перезагрузки браузера или с помощью ярлыка, например Shift + Ctrl + R , можно выполнить hard перезагрузка вкладки браузера. Можно ли обнаружить такую ​​ сложную перезагрузку с помощью JavaScript, и если да, то как?

Я знаю, что можно обнаружить, когда нормальное событие перезагрузки инициируется с событием onbeforeunload, и я могу определить тип навигации, чтобы различать обновление и перезагрузку, но я не могу обнаружить принудительную перезагрузку.

Пока что я использую следующий код JS для обнаружения перезагрузки:

window.addEventListener('beforeunload', function (e) {
  // Cancel the event
  e.preventDefault();
  // Chrome requires returnValue to be set
  e.returnValue = '';

  // For older browsers
  console.log('Is reloading?', event.currentTarget.performance.navigation.type === 1);

  // For modern browsers
  const perfEntries = performance.getEntriesByType("navigation");

  for (let i = 0; i < perfEntries.length; i++) {
    console.log('Is reloading? ', perfEntries[i].type === 1);
  }
});

Я бы хотел различать обычную перезагрузку, например, location.reload(), и принудительную перезагрузку, например, location.reload(true).

1 Ответ

0 голосов
/ 04 января 2019

Вы не можете обнаружить жесткое обновление в javascript , так как нет доступа к заголовкам для текущей загруженной страницы.

Проблема с J в avaScript заключается в том, что он не имеет понятия 304 . Он начинает выполняться в контексте веб-страницы, но не знает, как он сам или страница попали туда.

Однако сервер может по заголовкам запроса определить, является ли это жестким обновлением, поэтому есть возможность сотрудничества. Например, сервер может включить в ответ пользовательский тег <meta> или добавить специальный класс к <body>, и ваш скрипт получит доступ к этой информации.

Другой вариант - перехватить комбинацию клавиш на основе браузера / ОС и действовать до того, как будет запущено жесткое обновление (добавление чего-либо к URL, установка файла cookie или свойства local / sessionstorage)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...