我最近注意到,当当前网址和目标网址都有网址片段(location.replace
)时,#
实际上没有重新加载网页:
// Assume the current url is /#url-fragment
window.location.replace('/#my-new-url-fragment');
// Doesn't reload the page.
我正在寻找一种可靠的跨浏览器方式(支持IE8)来替换当前的网址而不添加历史记录。
答案 0 :(得分:0)
这是我能管理的最好的,但它不是一个非常彻底的答案。这更像是一种反复试验,然后实际上使行为合理化。
我构建了一个包含所有可能场景的表格,然后是一个用于检查结果的脚本。在所有条件下都有效的逻辑是:
window.location.replace(url);
/* If the target url has a hash, and ignoring hashes the two urls match,
then the location.replace() call above *did not reload the page*. Do so now. */
var urlWithoutHash = ...; // /test#hash -> /test
var currentUrlWithoutHash = ...;
if (url.indexOf('#') >= 0 && urlWithoutHash == currentUrlWithoutHash)
window.location.reload();