javascript - 实现History API时如何重新加载页面

标签 javascript

我正在尝试使用历史 API 来允许我在动态加载内容时使用后退和前进按钮。这是我正在使用的代码,以及我也在使用的状态对象的示例。

我如何使用状态对象和pushstate()

  var stateObj = {Content : homeSection.innerHTML, "Product" : detail.Name, Title : title.innerHTML, Section:"dynamicArticle"};
  window.history.pushState(stateObj, "", detailName);

  window.addEventListener('popstate', function(event) {
    updateContent(event.state);
  });

使用的函数:

function updateContent(stateObject) {
  if (stateObject){
    homeSection = document.getElementById(stateObject.Section);
    homeSection.innerHTML = stateObject.Content;
    title.innerHTML = stateObject.Title;

    var items = document.querySelectorAll(".homeItem");
    if(items){
      for(i=0; i<items.length; i++){
        items[i].addEventListener("click", selectedProduct);
      }
    }

    checkoutButton = document.getElementById('checkoutButton');
    if(checkoutButton){
      checkoutButton.addEventListener('click', function(){
          displayCheckout();
        });
    }

    basketButton = document.getElementById("basketButton");
    quantityInput = document.getElementById("productQuantity");
    if(basketButton){
      basketButton.addEventListener('click', clicked);
      basketButton.addEventListener('click', updateBasketNumber);
      quantityInput.value = "1";
    }

    searchSort = document.getElementById("sort");
    if(searchSort){
      var items = document.querySelectorAll(".searchResult");
      for(i=0; i<items.length; i++){
        items[i].addEventListener("click", selectedProduct);
      }

      searchSort.addEventListener("change", function(){
        sort = searchSort.value;
        searchItem(e, sort);
      });
    }
  }
  else{
    return;
  }
}

我遇到的问题是,如果我使用 pushState() 导航到其中一个页面,然后尝试重新加载该页面,正如您所期望的那样,无法找到该页面。

我问是否有一种方法可以允许重新加载或让某人导航到该 URL 而不会给出错误,并提供正确的内容

最佳答案

就像@jon-koops 在评论中指出的那样,您需要配置服务器以将请求重定向到所有链接分支的同一页面。

如果您使用的是 apache 2.2.16+,那么就很简单:

FallbackResource /index.html

这会将所有 URL 重写为单个入口点,即 index.html 页面。

其他解决方案取决于您运行的服务器。

关于javascript - 实现History API时如何重新加载页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29757918/

相关文章:

Javascript - 在一行中评估多个正则表达式

javascript - 当年份的格式为 yy 时,如何在 Javascript 中解释正确的日期?

Javascript:为函数创建回调

javascript - backbone.js:防止在模型更改时触发监听器事件

javascript - 编写一个自动填写并提交网页表单程序

javascript - chrome中如何获取当前事件元素?

javascript - Typescript 模块未在运行时定义

javascript - Angular 2 : Class Properties Not Updating On params retrieval

javascript - 用于 cron 作业的 Nodejs

javascript - jqGrid 标题宽度与数据列宽度不同