我知道如何将 HTML 写入新窗口,window.open()
但这当然会导致新窗口。
我希望将我的 HTML 输出字符串写入当前窗口。效果就像点击一个链接。目的是确保我有浏览器历史记录。
当我使用 引用 URL 时window.location.href()
,我无法编写内容,因为 href 属性必须是 URL。
有没有办法将两者结合起来,并将一个新页面加载到浏览器历史记录中,该页面使用 HTML 的字符串值而不是文件?不允许服务器端参与。
我知道如何将 HTML 写入新窗口,window.open()
但这当然会导致新窗口。
我希望将我的 HTML 输出字符串写入当前窗口。效果就像点击一个链接。目的是确保我有浏览器历史记录。
当我使用 引用 URL 时window.location.href()
,我无法编写内容,因为 href 属性必须是 URL。
有没有办法将两者结合起来,并将一个新页面加载到浏览器历史记录中,该页面使用 HTML 的字符串值而不是文件?不允许服务器端参与。
HTML5 为 JavaScript 带来了新的 History API。这允许您使用 JS 将内容推送到浏览器历史记录。有了这个,你也许能够完成你正在寻找的东西。如果这没有太大帮助,请澄清您的问题,因为很难说出您的要求。
编辑:
我认为这就是你要找的。看看这个例子。当您单击诸如“fluffy”之类的链接时,该站点实际上只是替换了站点正文的文本,并在浏览器的历史记录中添加了一个条目,以使用户看起来像是实际上转到了不同的页面。实际上,浏览器从来没有发出过另一个请求,也从来没有打开过另一个页面,这只是 javascript 的诡计让它看起来那样。
我发给你的演示链接的解释,有很多很好的信息:
http ://html5doctor.com/history-api/
jsFiddle 中的一个演示:
我在 jsFiddle中对我所说的内容做了一个小演示。如果你看,你会看到一个链接。如果您要右键单击并查看包含内容的那个小方块的来源,您会看到您正在查看页面的来源“ http://jsfiddle.net/ByZpW/4/ ”。
点击链接。
现在您将在链接上看到新内容和新文本。如果您再次查看那个小方块的源代码,您会看到您正在查看页面的源代码“ http://fiddle.jshell.net/lolnewpageonjsfiddledomain/ ”。
显然 jsFiddle 不允许我向他们的域添加新页面,所以发生了什么?我告诉 javascript 我去了别的地方,它相信了我。现在,如果您点击内容方块并点击backspace,您会看到您被带回“第一页”。如果您查看源,您将确认您回到了原始位置。当然,这都是一个天大的谎言。我们没有去任何地方,一切都是用 JavaScript 做的。
注意线:
// History magic here
history.pushState({link: link, content: content}, "test", $(this).attr("href"));
这就是我们使用 JS 说“假装我去了别的地方,即使我还在这里”。