在AJAX应用中修改地址栏URL以匹配当前状态

时间:2020-03-05 18:37:35  来源:igfitidea点击:

我正在编写一个AJAX应用程序,但是当用户浏览该应用程序时,尽管没有页面重新加载,我还是希望地址栏中的URL能够更新。基本上,我希望他们能够在任何时候添加书签,从而返回到当前状态。

人们如何处理维护AJAX应用程序中的RESTful?

解决方案

回答

这类似于凯文所说的。我们可以将客户端状态作为某些javascript对象,并且要保存状态时,可以序列化该对象(使用JSON和base64编码)。然后,我们可以将href的片段设置为此字符串。

var encodedState = base64(json(state));
var newLocation = oldLocationWithoutFragment + "#" + encodedState;

document.location = newLocation; // adds new entry in browser history
document.location.replace(newLocation); // replaces current entry in browser history

第一种方法会将新状态视为新位置(因此,后退按钮会将它们带到先前的位置)。后者没有。

回答

实现此目的的方法是在AJAX更新导致我们希望拥有谨慎URL的状态更改时处理location.hash。例如,如果页面网址是:

http://example.com/

如果客户端功能执行了以下代码:

// AJAX code to display the "foo" state goes here.

location.hash = 'foo';

然后,浏览器中显示的URL将更新为:

http://example.com/#foo

这使用户可以为页面的" foo"状态添加书签,并使用浏览器历史记录在状态之间进行导航。

使用此机制后,我们将需要使用JavaScript在客户端解析URL的哈希部分,以创建并显示适当的初始状态,因为片段标识符(#后面的部分)不会发送到服务器。

如果我们使用jQuery,Ben Alman的hashchange插件使后者变得轻而易举。

回答

SWFAddress可在Flash和Javascript项目中使用,它使我们可以创建可加书签的URL(使用上述哈希方法),并为我们提供后退按钮支持。

http://www.asual.com/swfaddress/

回答

window.location.hash方法是首选的处理方式。有关如何操作的说明,
Ajax模式唯一URL。

YUI将这种模式实现为一个模块,其中包括IE专用的解决方法,用于使后退按钮起作用,并使用哈希值重新写入地址。 YUI浏览器历史记录管理器。

其他框架也具有类似的实现。重要的一点是,如果我们希望历史记录与重写地址一起使用,则不同的浏览器需要不同的处理方式。 (这在第一篇链接文章中有详细介绍。)

IE需要基于iframe的hack,在Firefox中,Firefox将使用相同的方法产生双重历史记录。

回答

检查用户是否在页面中,当我们单击网址栏时,javascript表示我们不在页面内。
如果我们更改网址栏,然后在其中按下带有"#"符号的" ENTER"键,那么我们将再次进入该页面,而无需使用鼠标光标手动单击该页面,因此来自javascript的键盘事件命令(document.onkeypress)将能够检查是否已输入并激活了JavaScript以进行重定向。
我们可以使用window.onfocus检查用户是否在页面中,并通过window.onblur检查用户是否不在页面中。

是的,有可能。

;)