【发布时间】:2014-08-10 00:55:53
【问题描述】:
我正在编写一些 javascript 代码,并使用 window.History.pushState 加载新的 HTML 页面,而不是使用 href 标记。我的代码(工作正常)看起来像这样。
window.History.pushState({urlPath:'/page1'},"",'/page1')
奇怪的是,这失败,即重新加载浏览器
window.History.pushState({urlPath:'/page2.php'},"",'/page2.php')
但这有效,内容已更新,浏览器未刷新! (注意 URL 是绝对的而不是相对的)
window.History.pushState({urlPath:'www.domain.com/page2.php'},"",'www.domain.com/page2.php')
window.History.pushState 的documentation 表示第三个参数 URL 可以是绝对的或相对的 -
URL — 新历史条目的 URL 由该参数给出。笔记 调用后浏览器不会尝试加载此 URL pushState(),但它可能会尝试稍后加载 URL,例如 用户重新启动浏览器后。新的 URL 不需要 绝对;如果是相对的,则相对于当前 URL 进行解析。 新 URL 必须与当前 URL 同源;否则, pushState() 将抛出异常。该参数是可选的;如果 它没有被指定,它被设置为文档的当前 URL。
绝对 URL 似乎有效,但相对 URL 似乎无效。为什么会这样?
【问题讨论】:
-
所有浏览器都会出现这种情况吗?我经常使用
history.pushState的相对路径(未来的读者,请注意history中的小写h)(并且只是在Firebug 中尝试过)而不会导致重新加载。您还使用了哪些其他代码(因为 history.pushState 不加载任何内容,仅更新历史记录和地址栏)? -
这发生在 chrome 和 firefox 中。我在 chrome 的控制台面板中对此进行了测试,因此没有其他可能导致任何问题的代码。此问题仅在少数 URL 中可见。这是否与重定向规则有关(尽管文档说相对路径被解析为绝对路径,因此它应该同样影响绝对和相对 URL,但事实并非如此)?
-
请将您的代码放在某个地方,以便我们查看。正如@MrN00b 建议的那样,“历史”的小写“h”很重要。以下内容对我有用,无需刷新页面:
$('#buttonID').on('click', function() {window.history.pushState({urlPath:'/page1'},"",'/page1')}); -
您放入控制台的确切代码是什么?显然
window.History.pushState({urlPath:'/page2.php'},"",'/page2.php')会抛出异常(因为代码应该是history.pushState(...))。那行代码本身不会导致刷新 - 它会更改地址栏中的文本并将项目添加到历史记录中,仅此而已。重定向规则通常是服务器端的,因此无关紧要(服务器不知道客户端代码)。
标签: javascript php html browser pushstate