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

在第一页加载时执行JavaScript,但在从浏览器历史记录重新加载时不执行JavaScript,javascript,jquery,webpage,Javascript,Jquery,Webpage,我希望在加载页面时执行一些JavaScript代码,但不希望在用户返回页面时执行。JavaScript代码只是在页面上显示一条消息,但我不希望在从浏览器的历史记录列表重新加载页面时显示该消息 我使用的是jQuery,因此代码当前如下所示: $(function() { // Code to display the message goes here. }); 下面是我提出的一个解决方案,到目前为止似乎很有效,但有更好的方法吗 迄今为止的解决办法: $(function() {

我希望在加载页面时执行一些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哈希。

可能重复:@pax162否,OP也希望通过缓存/历史记录进行检测。@pax162-谢谢您的链接。这个问题的答案以最高票数使用隐藏形式。我更喜欢使用历史记录状态,但对于较旧的浏览器来说,这可能是一种更好的技术(而不是使用散列)。我要试一试。