在首页加载时执行JavaScript,但不从浏览器历史记录重新加载

时间:2013-11-08 19:34:55

标签: javascript jquery webpage

我希望在页面加载时执行一些JavaScript代码,但不要在用户后退按钮时执行。 JavaScript代码只在页面上显示一条消息,但我不希望在从浏览器的历史列表重新加载页面时显示该消息。

我正在使用jQuery,所以代码目前看起来像这样:

$(function() {
    // Code to display the message goes here.
});

以下是我提出的解决方案,到目前为止似乎有效,但还有更好的方法吗?

到目前为止的解决方案:

$(function() {
    function isPageFromHistory() {
        if (history.replaceState) {
            return history.state && history.state.loaded;
        } else {
            return location.hash == '#loaded';
        }
    }

    if (!isPageFromHistory()) {
        // Code to display the message goes here.
    }
});

$(window).on('load', function() {
    if (history.replaceState) {
        history.replaceState({ loaded: true }, '');
    } else {
        location.replace('#loaded');
    }
});

该解决方案将页面标记为在窗口的onload事件处理程序中加载。对于较新的浏览器,它通过使用history.replace()函数设置历史状态来实现。对于较旧的浏览器,它会使用哈希值向历史列表中的URL添加哈希值。

当然,这种解决方案有局限性。对于较新的浏览器,如果要将历史状态用于其他事项,则必须小心不要消除历史状态中的“已加载”值。对于旧版浏览器,由于其他原因,您无法使用URL哈希。

0 个答案:

没有答案