jQuery 函数 history.replaceState() 从 URL 中删除其他参数

我有以下jQuery代码,它在单击后退按钮时关闭引导模式。它工作正常。但是,当它关闭模式时,它应该从URL栏中删除,它确实如此。但是,在这样做的同时,它还会从URL中删除其他“必需”参数。例如:#my-modal-id


当 URL 为: 时,它可以正常工作。在这里,它根据脚本从URL栏中删除。目前为止,一切都好。http://localhost/gamearena/index.php#my-modal-id#my-modal-id


但是,当URL具有其他参数(例如)时,它会搞砸。在这里,它甚至会随之删除。我如何控制它,以便它只删除之前自行设置的模态ID。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();

    }

  });

编辑


在诊断了一点之后,我发现这条线负责改变这里的URL的内容,即删除哈希值和其他参数。此外,我注意到抓取URL只到它上面的参数,而不是超出它的参数。因此,在我看来,该函数将URL恢复为状态,而不是因为它无法识别它。因此,我得出的结论是,如果被一个能够将URL提取到(添加哈希部分之前的位置)的函数替换,那么问题将得到解决。因此,请专家对此进行一些阐述。history.replaceState('', document.title, window.location.pathname);window.location.pathnameindex.phpindex.phpindex.php?ref=shreyanshwindow.location.pathnameindex.php?ref=shreyansh


MMTTMM
浏览 374回答 2
2回答

Helenr

您的代码在设置哈希时不会更新历史记录,因此会恢复到较早的 URL 状态。history.back()这将更新哈希和历史记录:function addHash (hashString) {  let myHash = '#' + hashString;  location.hash = myHash;  history.replaceState(null, null, myHash);}

拉莫斯之舞

尝试window.location.hash = '';而不是使用window.history.back();如果要从 URL 中删除哈希。它还会触发window.onhashchange
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript