AJAX导航+ window.history.pushState:“返回”浏览器按钮不起作用

时间:2020-02-07 20:13:22

标签: javascript ajax browser-history

我创建了一个精巧的Javascript工具,以通过AJAX(包含所有功能的全局AjaxNav对象)支持部分克隆站点中的内容。当然,我希望浏览器历史记录(后退和前进按钮)能够正常工作,因此我具有以下小功能:

   var set_base_url = function (url) {  // important for local links (hash only)
        var head=null,
            base=$('html base').first();
        if (base) {
            base.attr('href', url);
            log('set base[href] to '+url);
        } else {
            $(document).add('<base>').attr('href', url);
            log('created <base> and set href to '+url);
        }

   var history_and_title = function (url, title, data) {
        var stateObj = {  // can be anything which is serializable, right?
            cnt: increased_state_counter()
            };
        if (typeof data.uid !== 'undefined') {
            stateObj['uid'] = data.uid;
        }
        if (title) {
            if (AjaxNav.options.development_mode) {
                title = '(AJAX) ' + title;
            }
            document.title = title;
        }
        if (url) {
            set_base_url(url);
            window.history.pushState(stateObj, '', url);
        } else {
            window.history.pushState(stateObj, '');
        }
    };
    AjaxNav.history_and_title = history_and_title;

此函数被调用,不会产生任何错误(至少我无法发现);但是,当我尝试通过单击“后退”浏览器按钮或按backspace键返回时,只有可见的url发生了更改,但没有重新加载任何内容。我现在可以接受整页的重新加载,但是通过AJAX从历史记录中重新加载页面当然更好。

有明显的错误吗?

The whole thing有点冗长(当前约850行),因为通常无法知道目标URL是指定对象还是其查看方法。因此,我每个超链接最多尝试两个UR,然后进行处理(替换内容,设置标题,event.preventDefault()等),或简单地返回true来加载整个页面。 / p>

1 个答案:

答案 0 :(得分:1)

您缺少popstate事件监听器。 /etc/nginx/nginx.conf将新的历史记录条目推送到集合中时,单击“后退”按钮将弹出历史记录集合中的状态。就像使用数组一样。 final OpenShiftConnectionFactory connectionFactory = new OpenShiftConnectionFactory(); IOpenShiftConnection connection2 = new OpenShiftConnectionFactory() .getConnection("domain", "user", "password"); 事件被设置为pushState对象,并且可以访问您在popstate函数中设置的window对象。

state对象信息提供有关当前页面应执行的操作的信息很有用。例如,加载当前页面必须获取哪些数据。

尝试以下代码段,查看其输出内容。

pushState
相关问题