jQuery функция history.replaceState () удаляет дополнительные параметры из URL - PullRequest
1 голос
/ 26 мая 2020

У меня есть следующий код jQuery, который закрывает модальное окно bootstrap при нажатии кнопки возврата. Работает нормально. Однако, когда он закрывает модальное окно, он должен удалить #my-modal-id из строки URL, что он и делает. Но при этом также удаляются дополнительные «обязательные» параметры из URL. Например:

Он отлично работает, если URL-адрес: http://localhost/gamearena/index.php#my-modal-id. Здесь он удаляет #my-modal-id из строки URL согласно сценарию. Все идет нормально.

Однако, когда URL-адрес имеет дополнительные параметры, такие как http://localhost/gamearena/index.php?ref=shreyansh#sidebar-left, происходит сбой. Здесь он даже удаляет ?ref=shreyansh вместе с ним. Как мне управлять им так, чтобы он удалял только модальный идентификатор, установленный ранее.

Вот код:

// Close model on clicking back button / swiping back
  $('div.modal').on('show.bs.modal', function() {
    var modal = this;
    var hash = modal.id;
    window.location.hash = hash;
    window.onhashchange = function() {
      if (!location.hash){
        $(modal).modal('hide');
      }
    }
  });
  $('div.modal').on('hidden.bs.modal', function() {
    var hash = this.id;
    history.replaceState('', document.title, window.location.pathname);
  });
  // when close button clicked simulate back
  $('div.modal button.close').on('click', function(){
    window.history.back();
  })
  // when esc pressed when modal open simulate back
  $('div.modal').keyup(function(e) {
    if (e.keyCode == 27){
      window.history.back();
    }
  });

EDIT

Немного диагностировав, я обнаружил, что строка history.replaceState('', document.title, window.location.pathname); отвечает за изменение содержимого URL здесь, то есть удаление ha sh и других параметров. Кроме того, я заметил, что window.location.pathname захватывает URL только до index.php, а не параметры за его пределами. Следовательно, на мой взгляд, функция возвращает URL-адрес в состояние index.php вместо index.php?ref=shreyansh, поскольку не может его распознать. Таким образом, я прихожу к выводу, что если window.location.pathname заменить функцией, которая может получать URL до index.php?ref=shreyansh (местоположение до добавления части ha sh), проблема будет решена. Следовательно, экспертов просят пролить свет на это.

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Ваш код не обновляет историю, когда он устанавливает ha sh, поэтому history.back() возвращается к более раннему состоянию URL.

Это обновит ha sh и историю:

function addHash (hashString) {
  let myHash = '#' + hashString;
  location.hash = myHash;
  history.replaceState(null, null, myHash);
}
0 голосов
/ 27 мая 2020

Попробуйте

window.location.hash = '';

вместо

window.history.back();

, если вы хотите удалить ha sh из URL. Он также вызовет window.onhashchange

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