用于检测用户是否更改选项卡的 Javascript

IT技术 javascript html
2021-03-09 18:20:24


我想为在线测验编写一个网页。我的基本要求是,如果参加测验的人即使没有最小化浏览器也会更改选项卡或打开新窗口,即如果该人试图从其他窗口/选项卡中查看答案,测验应该停止。我该怎么做?
PS:它不应该是一些非常新的 HTML5 功能。我希望当前所有主要浏览器都支持它。

6个回答

您可以通过将模糊/焦点事件侦听器附加到窗口来确定选项卡或窗口是否处于活动状态。

在 jQuery 中它会是

$(window).focus(function() {
    //do something
});

$(window).blur(function() {
    //do something
});

引自这个 SO 答案:https : //stackoverflow.com/a/1760268/680578

是否能够检测用户是否启动新窗口/浏览器而不最小化测验窗口?
2021-04-21 18:20:24
也会因为失去对窗口的关注而触发,但窗口仍然可见。
2021-04-24 18:20:24
单击该页面中的 iframe 时,您也会得到误报。
2021-04-26 18:20:24
感谢您的解决方案@Kristian
2021-05-13 18:20:24
如果出现新的弹出窗口,当前窗口将失去焦点,不是吗?
2021-05-18 18:20:24

在 2020 年,您可以:

document.addEventListener("visibilitychange", event => {
  if (document.visibilityState == "visible") {
    console.log("tab is active")
  } else {
    console.log("tab is inactive")
  }
})

如果您的目标浏览器支持它,则可以使用 HTML5 中提供的页面可见性 API。它不直接检测选项卡更改,每个说,但可见性更改。其中将包括(但不限于)选项卡更改。

请参阅https://developer.mozilla.org/en/DOM/Using_the_Page_Visibility_API

这是一个方便的 API,但是应该注意的是,目前(2015 年 3 月 6 日)有一些限制:Alt+ Tab(例如任何类型的应用程序打开)不会在 Windows 上注册 Firefox/Chrome/IE10。不过,在每个浏览器中切换选项卡确实可以正常工作。在 iOS 上,虽然应用切换或设备锁定确实会触发可见性变化。
2021-05-04 18:20:24

最好的原生函数,没有 jQuery。

document.hasFocus

检查笔,检查当您转到链接并返回代码笔选项卡时会发生什么。

https://codepen.io/damianocel/pen/Yxxzdj

伟大而简单
2021-04-27 18:20:24
2021-04-28 18:20:24
该演示每 200 毫秒检查一次可见性,在电池使用方面并不理想。Visibility API 是基于事件的,适用于 IE10 甚至移动设备,因此我强烈建议您使用它。
2021-04-29 18:20:24
似乎在 Opera、FireFox、Safari 和 Chrome 中对我有用。没有在其他地方测试过。
2021-05-04 18:20:24

使用 jQuery:

$(window).on('focus', function () {

});

$(window).on('blur', function () {

});

$().focus&$().blur已弃用。