【发布时间】:2016-11-30 12:14:19
【问题描述】:
是否可以在页面加载后通过 JavaScript 更改浏览器历史记录中的页面标题?应该是跨浏览器(当然)并且可以在不支持 HTML5 History API 的浏览器上工作,我的主要目标浏览器是 Chrome。
我尝试了多种方法,但似乎没有一种方法能够可靠地工作。这是我上次尝试过的 (history.js):
<html>
<head>
<title>Standard title</title>
<script src="https://rawgit.com/browserstate/history.js/master/scripts/bundled-uncompressed/html4%2Bhtml5/native.history.js"></script>
</head>
<body>
<script>
window.setTimeout(function(){
document.title = "My custom title";
History.replaceState({}, "My custom title", window.location.href);
}, 3000);
</script>
</body>
</html>
如果我在页面加载后 3 秒内在 Chrom 中加载历史记录页面,我会看到 Standard title,3 秒后我会看到 My custom title。
为什么我需要这个:我有一个仅适用于 JavaScript 的应用程序 (Angular 1),它在不同的环境(开发、测试、生产)上运行。我想显示像MyApp (<environmentName>) 这样的标题,但我不想为每个环境构建单独的应用程序版本。相反,应用程序可以通过 AJAX 从后端请求环境信息并更新页面的标题。所有这些都可以正常工作(页面标题已更新),但浏览器历史记录仍显示“标准”标题。
有没有办法在浏览器历史记录中更改页面的标题?
【问题讨论】:
-
以前我可以通过给
document.title赋值来让它工作。但是,我无法再重现工作行为,我不确定它取决于什么要求。 -
@JohnWhite 我观察到它是否有效取决于我实际打开历史页面的时间 - 在标题之前或之后。
-
那如果你去掉超时,让它在页面加载后立即更新标题,它不会是自动的吗?
-
@RomainFournereau 超时模拟“我们想在某个时间点更改标题”。
-
注明。我想您将不得不等待 replaceState() 与标题一起使用。否则,我想更残酷的方法是以某种方式返回,然后直接返回页面,更新标题。
标签: javascript angularjs google-chrome browser-history