location.replace与url片段不一致

时间:2015-05-26 02:36:51

标签: javascript

我最近注意到,当当前网址和目标网址都有网址片段(location.replace)时,#实际上没有重新加载网页:

// Assume the current url is /#url-fragment
window.location.replace('/#my-new-url-fragment');
// Doesn't reload the page.

我正在寻找一种可靠的跨浏览器方式(支持IE8)来替换当前的网址而不添加历史记录。

1 个答案:

答案 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();