【问题标题】:Why `replaceState` removes `index.html` in `/basehref/index.html`为什么`replaceState`删除`/base href/index.html`中的`index.html`
【发布时间】:2017-11-01 14:50:53
【问题描述】:

我将/is/ 设置为基本href,并在使用replaceState()index.html 中使用以下简单代码:

<base href="/is/">
<script>
    setTimeout(()=>{
        history.replaceState(null, "", "#/some");
    }, 2000);
</script>

代码执行前的URL如下所示:

http://localhost:8080/index.html

然而,一旦代码被执行,index.html 就消失了,URL 看起来像这样:

http://localhost:8080/is/#/some

我希望它看起来像这样:

http://localhost:8080/is/index.html#/some

为什么index.html 不见了?

【问题讨论】:

    标签: javascript html browser-history pushstate


    【解决方案1】:

    &lt;base&gt; 标记建立文档基础 URL。这可作为 API 中所有相对 URL 的参考点,例如 History API。这就是&lt;base&gt; 的全部意义所在。

    “当前”URL 在 W3C 规范中称为“后备基本 URL”,只有在没有具有指定 href 值的 &lt;base&gt; 标记时才会发挥作用。

    所以答案基本上是事情就是这样运作的。

    【讨论】:

    • 谢谢,所以你说的原因是base href,而不是replaceState
    • 对,你已经在文档中添加了一个&lt;base&gt; 标签,所以浏览器认为这就是你想要它做的事情。奇怪的是,我认为我在多年的网络编程中从未使用过&lt;base&gt; 标签。
    • 谢谢,有趣的是,base href 被应用,index.html 仅在 replaceState 上被删除,而不是在页面加载时删除
    猜你喜欢
    • 2021-02-03
    • 2012-04-04
    • 1970-01-01
    • 2015-07-13
    • 2014-04-24
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多