history.go(-1)、history.back()区别

本文介绍History对象的基础使用方法,包括其属性与方法的说明,并对比了不同浏览器环境下使用back()和go()方法的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

History 对象简单用法

History 对象

History 对象包含用户(在浏览器窗口中)访问过的 URL。

History 对象是 window 对象的一部分,可通过 window.history 属性对其进行访问。

注意: 没有应用于History对象的公开标准,不过所有浏览器都支持该对象。

History 对象属性
属性描述
length返回浏览器历史列表中的 URL 数量。
History 对象方法
方法描述
back()加载 history 列表中的前一个 URL。
forward()加载 history 列表中的下一个 URL。
go()加载 history 列表中的某个具体页面。
History 对象描述

History 对象最初设计来表示窗口的浏览历史。但出于隐私方面的原因,History 对象不再允许脚本访问已经访问过的实际 URL。唯一保持使用的功能只有 back()、forward() 和 go() 方法。

Histyory 实际应用
  1. 用途:
返回一个页面方法有很多,就好比给返回按钮绑定一个URL,但是如果一个页面可以从很多页面到达,那么这个页面返回的页面就不是固定的,那么绑定固定的URL显然不妥。
  1. 区别:
history.back(-1)  //直接返回当前页的上一页,数据全部消失,是个新页面
history.go(-1)    //也是返回当前页的上一页,不过表单里的数据全部还在
history.back(0)   //刷新
history.back(1)   //前进 
浏览器实际情况

pc端:

IE5–IE11,360极速浏览器,谷歌,火狐,UC浏览器
history.go(-1)、history.back()、window.location.href=document.referrer
都会在返回页刷新重新执行JS;
苹果浏览器(5.1.7)只有window.location.href 会在返回页重新执行JS
chrome和ff浏览器后退页面,会刷新后退的页面,若有数据请求也会提交数据申请。类似于
history.back()

手机端:

安卓苹果 微信 QQ 支付宝 钉钉 UC浏览器部分history.go(-1)、history.back()会在返回页刷新重新执行JS,部分不会。。window.location.href 会在返回页重新执行JS。。
而safari(包括桌面版和ipad版本)的后退按钮则不会刷新页面,也不会提交数据申请。类似于
Javascript:history.go(-1)。

无论pc还是手机端history.go(-1)、history.back()效果相同。

总结
window.location.reload() //刷新
window.history.go(1) //前进
window.history.go(-1) //后退
window.history.forward() //前进
window.history.back() 后退+刷新
window.location.href=document.referrer//后退+刷新
<think>嗯,用户想了解在asp:HyperLink中使用onclick="javascript:window.history.go(-1)"的用法和关联。首先,我需要回忆一下HyperLink控件的基本属性,比如NavigateUrl、Text、Target等,以及事件处理。用户提到的onclick事件是客户端脚本,通常用于执行JavaScript代码。而window.history.go(-1)的作用是让浏览器返回上一个页面,类似于后退按钮。所以问题是如何将这个JavaScript代码与HyperLink控件结合起来。接下来,我需要考虑HyperLink控件的常见用法。通常,HyperLink用于生成超链接,导航到其他页面。但如果要执行JavaScript,可能需要阻止默认的导航行为。比如,如果同时设置了NavigateUrl和onclick,浏览器可能会先执行onclick中的脚本,然后仍然进行导航,这可能导致不符合预期的情况。 因此,正确的做法可能是将NavigateUrl设置为空或javascript:void(0),并在onclick中执行history.go(-1),同时可能需要return false来阻止默认行为。或者,使用OnClientClick事件,这是ASP.NET提供的客户端点击事件处理属性,可以更自然地集成到服务器控件中。 另外,需要区分HyperLink和LinkButton的区别,因为LinkButton更常用于触发服务器端事件,但这里用户明确使用的是HyperLink。所以重点应该放在如何正确绑定客户端事件,并确保不会与NavigateUrl冲突。 还要考虑用户可能遇到的问题,比如点击后不返回,或者同时跳转到其他页面。需要提醒用户注意阻止默认行为,比如在OnClientClick中返回false,或者在JavaScript中使用preventDefault()方法。 最后,结合用户提供的引用内容,特别是引用[2]中提到的history对象的方法,可以举例说明如何在HyperLink中实现返回功能,并给出正确的代码示例,同时指出常见错误和解决方法。</think>### ASP.NET HyperLink控件中`onclick="javascript:window.history.go(-1)"`的用法详解 #### 一、基本语法与作用 1. **核心功能** `window.history.go(-1)` 是JavaScript的浏览器历史操作方法,用于返回上一个访问页面(相当于点击浏览器的后退按钮)[^2]。与`asp:HyperLink`结合使用时,可实现**点击超链接触发页面回退**的功能。 2. **基本实现方式** ```asp.net <asp:HyperLink ID="lnkBack" runat="server" Text="返回上一页" NavigateUrl="javascript:void(0)" OnClientClick="window.history.go(-1); return false;"> </asp:HyperLink> ``` - `NavigateUrl="javascript:void(0)"`: 禁用默认链接跳转行为[^3] - `OnClientClick`: 指定客户端点击事件(优于直接使用`onclick`属性) - `return false`: 阻止事件冒泡和默认行为 #### 二、关键注意事项 1. **与`NavigateUrl`的冲突处理** $$ \text{若同时设置} \ \texttt{NavigateUrl} \ \text{和} \ \texttt{OnClientClick}, \ \text{需确保不触发矛盾跳转} $$ ```asp.net <!-- 错误示例:可能先执行回退,再跳转新页面 --> <asp:HyperLink runat="server" NavigateUrl="Default.aspx" OnClientClick="window.history.go(-1)"> </asp:HyperLink> ``` 2. **兼容性优化** ```javascript // 添加异常处理防止无历史记录时报错 function goBack() { try { history.go(-1); } catch(e) { window.location.href = "/"; // 失败时跳转首页 } return false; } ``` ```asp.net <asp:HyperLink runat="server" OnClientClick="return goBack()"> </asp:HyperLink> ``` #### 三、进阶用法 1. **动态绑定到数据控件** 在`Repeater`或`GridView`中动态生成返回链接: ```asp.net <asp:Repeater ID="rptItems" runat="server"> <ItemTemplate> <asp:HyperLink runat="server" Text='<%# Eval("ItemName") %>' OnClientClick='<%# "window.history.go(" + Container.ItemIndex + "); return false;" %>'> </asp:HyperLink> </ItemTemplate> </asp:Repeater> ``` 2. **与服务器端交互** ```csharp // 后台根据条件控制是否启用回退 if (Session["AllowBack"] != null) { lnkBack.OnClientClick = "window.history.go(-1); return false;"; } else { lnkBack.NavigateUrl = "RestrictedPage.aspx"; } ``` #### 四、调试建议 1. **浏览器控制台验证** ```javascript // 查看生成的HTML代码 console.log(document.getElementById('<%= lnkBack.ClientID %>').outerHTML); ``` ``` <!-- 预期输出 --> <a id="MainContent_lnkBack" href="javascript:void(0);" onclick="window.history.go(-1); return false;">返回上一页</a> ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值