### 如何用JavaScript判断浏览器是刷新还是关闭 在Web开发中,有时候我们需要了解用户是通过刷新页面还是直接关闭浏览器来离开当前网页。虽然JavaScript本身并没有提供直接的方法来区分这两种行为,但可以通过监听某些事件和利用特定技巧来实现这一功能。 #### 一、问题背景与分析 假设我们的目标是在ASP.NET应用中,利用JavaScript来判断用户是刷新了页面还是关闭了浏览器。这个问题的核心在于如何通过JavaScript捕获到用户的行为,并作出相应的判断。根据提供的部分代码片段和上下文信息,我们可以看到主要关注于`window.onbeforeunload`事件及其处理逻辑。 #### 二、基础知识介绍 1. **`window.onbeforeunload`**: - 这个事件在页面卸载前触发。 - 可以用来询问用户是否真的想要离开页面(例如显示确认对话框)。 - 如果返回值为非空字符串,则会显示默认的警告消息(除非使用 `window.event.returnValue = '';` 阻止)。 2. **屏幕坐标系统**: - `window.event.screenX`:表示鼠标当前位置相对于屏幕左上角的横坐标。 - `window.screenLeft`:表示浏览器窗口左边界相对于屏幕左边缘的位置。 - `document.documentElement.scrollWidth`:表示整个文档的宽度(包括滚动条等)。 3. **键盘事件**: - `event.keyCode`:表示按下的键的虚拟键码。 - F5 键的 keyCode 为 116,Alt+F4 的 keyCode 分别为 18 和 115。 #### 三、技术实现方案 ##### 1. 利用 `window.onbeforeunload` 事件 在页面即将卸载时,可以通过检查用户的动作来判断其意图: ```javascript window.onbeforeunload = function(event) { var n = window.event.screenX - window.screenLeft; var b = n > document.documentElement.scrollWidth - 20; if (b || event.altKey) { // 用户可能打算关闭窗口 alert('是关闭而非刷新'); window.open(this.location); } else { // 用户可能是刷新页面 alert('是刷新而非关闭'); } }; ``` 这里的关键是通过比较鼠标的横坐标与屏幕边界,以及检测 Alt+F4 组合键的按下情况来做出判断。 ##### 2. 使用标志变量来区分刷新与关闭 为了更准确地区分页面是被刷新还是被关闭,可以引入一个标志变量并在不同的生命周期事件中进行更新: ```javascript let isRefresh = false; window.onbeforeunload = function() { isRefresh = true; }; window.onunload = function() { if (!isRefresh) { console.log('页面被关闭'); } isRefresh = false; }; window.onload = function() { if (isRefresh) { console.log('页面被刷新'); } }; ``` 通过这种方法,当页面被刷新时,`onbeforeunload` 会被触发并设置 `isRefresh` 为 `true`;接着 `onunload` 和 `onload` 也会依次被触发。而在页面被关闭时,只有 `onunload` 会被触发一次。 #### 四、兼容性和限制 需要注意的是,不同浏览器对于这些事件的支持和表现可能会有所差异。例如,某些浏览器可能不允许在 `onbeforeunload` 中进行导航或弹出警告框的操作。因此,在实际应用中还需要对代码进行适配和测试,确保在各种环境下都能正常工作。 总结而言,虽然直接通过 JavaScript 判断页面是被刷新还是被关闭存在一定的局限性,但通过巧妙地利用现有的事件和属性,结合适当的逻辑判断,我们可以较为准确地实现这一功能。























如何用JS判断浏览器刷新还是关闭?
HTML code
var currentKeyCode = -1;
function document.onkeydown() { // 本窗口的所有下属页面都必须含有本函数
top.currentKeyCode = event.keyCode;
}
function window.onbeforeunload() {
var sw = 0, s0 = ;
if (currentKeyCode == 116)
{
s0 += 刷新窗口!(F5) ;
}
else
{
if ((event.altKey) (currentKeyCode == 115))
{
s0 += 关闭窗口!(alt+F4) ; sw = 1;
}
{
if ((event.clientX 0) (event.clientX document.body.clientWidth))
{
s0 += 刷新窗口! ;
}
else
{
s0 += 关闭窗口! ; sw = 1;
}
}
}
if (sw == 1)
{
event.returnValue = ;
}
else
{
currentKeyCode = -1;
}
}
这是我从网上找的一段JS代码,用浏览器右上角的关闭按钮时好用,但在选项卡上关闭和在任务栏上关闭,这个方法就不作用了,我用的是IE8
剩余26页未读,继续阅读


- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 微信小程序反编译工具(1).zip
- [四川]卷烟厂整体技改联合工房钢结构网架施工方案.doc
- 小商店微信小程序.zip
- 反“三违”违章操作原因分析及对策.pptx
- kuaishou_250821_5.0.4+153.apk
- 起搏故障排除200070.ppt
- 微信小程序支付后台接口编写.zip
- 北京六环路投标施工组织设计.doc
- 安全监理规划、细则、方案、措施编制与实施登记表.doc
- 微信小程序的掘金信息流.zip
- GBT-29639-2020-新版应急预案修改对照及解读.pptx
- 32层住宅楼工程造价指标(结算指标).doc
- 【苏州】某大酒店空调设备安装工程施工组织设计方案.doc
- 原生微信小程序电商项目.zip
- 微信小程序-仿饿了么.zip
- 高压线防护方案.docx


