window.location.href和window.location.replace的区别

作者Veris 文章分类 分类:Javascript 文章评论 0条评论 阅读次数 已被围观 4576

今天在做OA项目中的BBS论坛模块的时候涉及到关于页面跳转的问题:在论坛后台管理模块中有个删除论坛的功能,点击删除按钮后将删掉该论坛以及该论坛中的所有帖子和回复。在后台中删除按钮是用a标签链接的,把a标签的href属性设置为自己写的跳转到delete.asps页面的js函数,该js函数的功能是先弹出一个提示框,提示用户是否删除该论坛,如果用户选择了确定删除,则页面跳转到delete.asps页面去处理删除数据,但处理完毕后页面返回到当前操作的页面。这其中就用到了window.location来跳转到delete.aspx页面的。其实window.location和window.location.href功能是一样的,都是跳转后能够自动后退到之前操作的页面的。

  先做这个简单的跳转功能的时候,我还试了下window.location.replace的效果,发现window.location.replace和window.location(.href)的区别是如下:

 用window.location(.href)的情况:假如我是先进入了公共通讯录设置这个页面,然后再进入论坛设置页面,在论坛设置页面中有个新建论坛按钮,该按钮是html客户端控件,通过window.location定位到新建论坛页面,在新建论坛页面上按浏览器的后退功能时,是先后退到论坛设置页面,然后在论坛设置页面按后退功能时就后退到了公共通讯录设置这个页面。

而用window.location.replace的情况:假如我是先进入了公共通讯录设置这个页面,然后再进入论坛设置页面,在论坛设置页面中有个新建论坛按钮,该按钮是html客户端控件,通过window.location定位到新建论坛页面,在新建论坛页面上按浏览器的后退功能时,是直接后退到公共通讯录设置页面的。

 在此摘抄一段网上找的“window.location.href与window.location.replace的区别和联系”:

首先:href是location对象的一个属性,可以直接赋值。replace 是location对象的一个方法。

window.location.replace不在浏览器中保存跳转前的网址,因此按返回键将无效;而 window.location.href则不存在这个问题
 replace 方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,你不能通过“前进”和“后 退”来访问已经被替换的URL。
下面举个例子:

有 3个jsp页面(1.jsp, 2.jsp, 3.jsp),进系统默认的是1.jsp ,当我进入2.jsp的时候, 2.jsp里面用window.location.replace("3.jsp");与用window.location.href("3.jsp");从用户界面来看是没有什么区别的,但是当3.jsp页面有一个“返回”按钮,调用 window.history.go(-1);wondow.history.back();方法的时候,一点这个返回按钮就要返回2.jsp页面的话,区别就出来了,当用window.location.replace("3.jsp");连到3.jsp页面的话,3.jsp页面中的调用 window.history.go(-1);wondow.history.back();方法是不好用的,会返回到1.jsp 。当用window.location.href("3.jsp");连到3.jsp页面的话,3.jsp页面中的调用 window.history.go(-1);wondow.history.back();方法是好用的,会返回2.jsp。因为window.location.replace("3.jsp");是 不向服务器发送请求的跳转window.history.go(-1);wondow.history.back(); 方法是根据服务器记录的请求决定该跳到哪个页面的,所以会跳到系统默认页面1.jsp 。window.location.href("3.jsp");是向服务 器发送请求的跳转window.history.go(-1);wondow.history.back(); 方法是根据服务器记录的请求决定该跳到哪个页面的,所以就可以返回到2.jsp。

 

附注:

  在通常情况下,我们使用window.location=URL与window.location.href=URL来进行页面的跳转时没有什么不同,在IE与Firefox下我自己测试过,无论是URL是绝对路径还是相对路径,两者都可以起作用。

  但是仔细再Google上查找了相似的问题,却发现原来另有情况,那就是:

(源地址:http://www.cnpublic.com/2009/06/windowlocationhref-invalid/)

  浏览器区别:IE或者Firefox2.0.x下,可以使用window.location或window.location.href;

Firefox1.5.x下,只能使用window.location.


发表评论: