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