0

我知道如何将 HTML 写入新窗口,window.open()但这当然会导致新窗口。

我希望将我的 HTML 输出字符串写入当前窗口。效果就像点击一个链接。目的是确保我有浏览器历史记录。

当我使用 引用 URL 时window.location.href(),我无法编写内容,因为 href 属性必须是 URL。

有没有办法将两者结合起来,并将一个新页面加载到浏览器历史记录中,该页面使用 HTML 的字符串值而不是文件?不允许服务器端参与。

4

1 回答 1

2

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 说“假装我去了别的地方,即使我还在这里”。

于 2013-03-14T03:26:13.407 回答