Как отключить загрузку тела при использовании кнопки «Назад» в браузере

Мы используем функцию загрузки тела для инициализации выбора в форме, если пользователь изменяет этот выбор и часто отправляет форму, а затем хочет щелкнуть назад, чтобы изменить выбор и отправить форму снова.

Когда пользователь нажимает назад, форма явно сбрасывает функцию загрузки. Мы хотим, чтобы пользователь мог использовать кнопку «Назад», чтобы увидеть свой выбор.

Мы пробовали несколько методов запуска переменных один раз и отключения загрузки в кнопке отправки. Ничего не удалось.

Есть идеи?


person Ross Merken    schedule 13.04.2020    source источник


Ответы (1)


Попробуйте вызвать это из функции загрузки перед очисткой формы:

function isBackForward() {
  if (typeof performance === "object") {
    // Use the newer API if available.
    // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming
    if (typeof performance.getEntriesByType === "function") {
      var entries = performance.getEntriesByType("navigation");
      if (entries.length === 1) {
        if (entries[0].type === "back_forward") {
          return true;
        } else {
          return false;
        }
      } else {
        // unable to determine
        return void(0); // undefined
      }
    // Try the older deprecated API instead
    // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigation
    } else if (typeof performance.navigation === "object") {
      if (performance.navigation.type === performance.navigation.TYPE_BACK_FORWARD) {
        return true;
      } else {
        return false;
      }
    } else {
      // unable to determine
      return void(0); // undefined
    }
  } else {
    // unable to determine
    return void(0); // undefined
  }
}

Эта функция вернет true, если использовалось перенаправление назад или вперед, undefined, если браузер не поддерживает API, необходимый для определения этого, или false, если это был другой тип навигации.

К сожалению, это само по себе не будет работать в Safari. Для Safari можно установить значение состояния в sessionStorage (см. https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage) для страницы при нажатии кнопки отправки, а затем проверьте ее перед очисткой формы.

person ryanc    schedule 16.04.2020