我知道如何使用window.open()
将HTML写入新窗口,但这会导致新窗口。
我希望将我的HTML输出字符串写入当前窗口。效果就像点击链接一样。目的是确保我有浏览器历史记录。
当我使用window.location.href()
引用网址时,我无法撰写内容,因为href属性必须是网址。
有没有办法将两者结合起来,并将新页面加载到浏览器历史记录中,该页面使用HTML的字符串值而不是文件?不允许服务器端参与。
答案 0 :(得分:2)
HTML5带来了一个新的JavaScript历史API。这允许您使用JS将内容推送到浏览器历史记录。有了这个,你或许可以完成你想要的。如果这不太有帮助,请澄清你的问题,因为要告诉你的要求有点难。
编辑:
我想这就是你要找的东西。看看this example。当您单击“蓬松”等链接时,该网站实际上只是替换了网站正文的文本,并在浏览器的历史记录中添加了一个条目,使用户看起来实际上转到了另一个页面。实际上,浏览器从未提出过另一个请求,从未打开过另一个页面,只是javascript技巧才能让它看起来像这样。
解释我发给你的演示链接,有很多好消息:
http://html5doctor.com/history-api/
jsFiddle演示:
我已经对我所说的here in a 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说“假装我去了其他地方,即使我还在这里”。