尝试在没有片段标识符(即散列符号#)的情况下重新加载当前页面,并使用以下代码来正常运行:
var path = window.location.href.replace(/(\#.*)/,'');
window.location = path;
我也知道上面的第二行可以读window.location.href = path;
,这将我带到下一部分。
在达到上述代码之前,我们尝试了:
var path = window.location.href.replace(/(\#.*)/,'');
window.location.href = path;
window.location.reload();
然而,这对我们不起作用,因为href
值似乎没有设置,我觉得reload()
之前或之前正在调用href = path
位。 / p>
这让我很好奇,reload()
的{{1}}函数从哪里获取其值以重新加载页面?
如果我点击在片段标识符(可能是目录)之间跳转的页面,则地址栏会相应地更新,并且在调用时,window.location
将使用正确的片段进行更新。然而,如果我在地址栏中手动输入内容然后调用window.location.reload()
函数,它将不会加载我的手动输入,而是加载最后一个“计算机定义”值。
我的猜测是用户代理(在这种特殊情况下,Chrome 44)正在侦听和更新每次与DOM或窗口内交互的值。我查看了HTML5 spec和MDN Location.reload()文档以获取相关信息,要么它不存在,要么我太密集了,无法找到/理解它。
有人可以向我解释reload()
获取它的价值以及如何通过用户与网页互动来更新它吗?
在此方案中使用reload()
和window.location = path
之间的确切区别是什么?
答案 0 :(得分:3)
如果要删除网址的“#”部分,则必须明确设置:
window.location.hash = ""
然后调用window.location.reload()。
window.location = path
只不过是window.location.href = path
的语法糖。
答案 1 :(得分:2)
位置(值)仅在成功导航后更改!换句话说,location
实例表示当前加载的页面(包括片段)。
为window.location.href
(重新)分配新值会加载页面。
因此,当您致电window.location.href = path;
时,浏览器想要加载新网址(没有#的网址)。但是,如果你立即拨打window.location.reload();
,就像说“不,等等!重新加载当前页面(带#的那个)”。