前端页面防切屏主要用到Document.visibilityState属性以及visibilitychange方法,下面详细介绍下使用方法,以及能检测到的场景
Document.visibilityState
Document.visibilityState
(只读属性), 返回document
的可见性,即当前可见元素的上下文环境。由此可以知道当前文档 (即为页面) 是在背后,或是不可见的隐藏的标签页,或者 (正在) 预渲染。可用的值如下:
'visible'
: 此时页面内容至少是部分可见。即此页面在前景标签页中,并且窗口没有最小化。'hidden
' : 此时页面对用户不可见。即文档处于背景标签页或者窗口处于最小化状态,或者操作系统正处于 '锁屏状态' .'prerender'
: 页面此时正在渲染中,因此是不可见的 (considered hidden for purposes ofdocument.hidden
). 文档只能从此状态开始,永远不能从其他值变为此状态。注意:浏览器支持是可选的。
当此属性的值改变时,会递交 visibilitychange
事件给Document
.
典型用法是防止当页面正在渲染时加载资源,或者当页面在背景中或窗口最小化时禁止某些活动。
语法
var string = document.visibilityState
visibilitychange
当其选项卡的内容变得可见或被隐藏时,会在文档上触发 visibilitychange
(能见度更改) 事件。
示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>切屏测试</title>
<script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script>
</head>
<body>
<h1>切屏测试</h1>
<script>
var vConsole = new window.VConsole();
let count = 0
document.addEventListener("visibilitychange", function() {
if(document.visibilityState == 'visible') {
count++
console.log(count)
}
});
</script>
</body>
</html>
测试场景
1. mac上google浏览器,以下场景count次数递增
- 切换tab栏
- 全屏窗口切换
- 息屏
注:窗口上面打开/关闭应用(比如微信),不会触发该事件
2. IOS 微信浏览器,以下场景count次数递增
- 应用切换
- 退出后台
3. IOS safari浏览器,以下场景count次数递增
- 应用切换
- 退出后台
- 切换tab栏