feat: 0.0.3,修复alert等方法和切后台导致的bug,兼容IE等
This commit is contained in:
parent
9f814a1849
commit
04d2a4ff87
3
.babelrc
3
.babelrc
@ -4,7 +4,8 @@
|
||||
{
|
||||
"useBuiltIns": "entry",
|
||||
"targets": {
|
||||
"esmodules": true
|
||||
"esmodules": true,
|
||||
"ie": 11
|
||||
}
|
||||
}
|
||||
]],
|
||||
|
@ -1,4 +1,5 @@
|
||||
/public/bundle.js
|
||||
/public/index.html
|
||||
/npm
|
||||
/cdn
|
||||
/cdn
|
||||
**/*.html
|
@ -20,7 +20,7 @@
|
||||
<a href="https://www.github.com/theajack/disable-devtool"><img src="https://img.shields.io/librariesio/dependent-repos/npm/disable-devtool.svg" alt="Dependent"></a>
|
||||
</p>
|
||||
|
||||
**[English](https://github.com/theajack/disable-devtool/blob/master/helper/README.en.md) | <a target="view_window" href="https://theajack.gitee.io/disable-devtool">在线试用/文档</a> | [Gitee](https://gitee.com/theajack/disable-devtool)**
|
||||
**[English](https://github.com/theajack/disable-devtool/blob/master/README.md) | [在线试用/文档](https://theajack.gitee.io/disable-devtool) | [更新日志](https://github.com/theajack/disable-devtool/blob/master/helper/version.md) | [Gitee](https://gitee.com/theajack/disable-devtool)**
|
||||
|
||||
## 1. 快速使用
|
||||
|
||||
@ -52,10 +52,11 @@ disable-devtool 可以禁用所有一切可以进入开发者工具的方法,
|
||||
2. 禁用 f12 和 ctrl+shift+i 快捷键
|
||||
3. 支持识别从浏览器菜单栏打开开发者工具并关闭当前页面
|
||||
4. 开发者可以绕过禁用 (url参数使用tk配合md5加密)
|
||||
5. 支持几乎所有浏览器
|
||||
5. 支持几乎所有浏览器(包含IE)
|
||||
6. 高度可配置
|
||||
7. 使用极简、体积小巧 (仅6kb)
|
||||
8. 支持npm引用和script标签引用(属性配置)
|
||||
9. 识别真移动端与浏览器开发者工具设置插件伪造的移动端,为移动端节省性能
|
||||
|
||||
## 3. 使用
|
||||
|
||||
@ -84,9 +85,12 @@ declare interface optionStatic {
|
||||
debugDelay?: number; // debug模式时的延迟 默认200ms
|
||||
interval?: number; // 定时器的时间间隔 默认200ms
|
||||
disableMenu?: boolean; // 是否禁用右键菜单 默认为true
|
||||
stopIntervalTime?: number; // 在移动端时取消监视的等待时长
|
||||
}
|
||||
```
|
||||
|
||||
备注:disableMenu参数在ie下无效,因为ie下右键会阻塞主进程,且无法监听
|
||||
|
||||
### 3.2 md5 与 tk 绕过禁用
|
||||
|
||||
该库中使用 key 与 md5 配合的方式使得开发者可以在线上绕过禁用。
|
||||
|
@ -19,7 +19,7 @@
|
||||
<a href="https://www.github.com/theajack/disable-devtool"><img src="https://img.shields.io/librariesio/dependent-repos/npm/disable-devtool.svg" alt="Dependent"></a>
|
||||
</p>
|
||||
|
||||
**[中文](https://github.com/theajack/disable-devtool/blob/master/README.cn.md) | <a target="view_window" href="https://theajack.gitee.io/disable-devtool">online trial/document</a> | [Gitee](https://gitee.com/theajack/disable-devtool)**
|
||||
**[中文](https://github.com/theajack/disable-devtool/blob/master/README.cn.md) | [online trial/document](https://theajack.gitee.io/disable-devtool) | [Version Log](https://github.com/theajack/disable-devtool/blob/master/helper/version.md) | [Gitee](https://gitee.com/theajack/disable-devtool)**
|
||||
|
||||
## 1. Quick use
|
||||
|
||||
@ -51,10 +51,11 @@ The library has the following features:
|
||||
2. Disable f12 and ctrl+shift+i shortcuts
|
||||
3. Support recognition to open the developer tools from the browser menu bar and close the current page
|
||||
4. Developers can bypass the disablement (use tk and md5 encryption for url parameters)
|
||||
5. Support almost all browsers
|
||||
5. Support almost all browsers (Include IE)
|
||||
6. Highly configurable
|
||||
7. Minimal use, small size (only 6kb)
|
||||
8. Support npm reference and script tag reference (attribute configuration)
|
||||
9. Identify the real mobile terminal and browser developer tool settings plug-in forged mobile terminal, saving performance for the mobile terminal
|
||||
|
||||
## 3. Use
|
||||
|
||||
@ -83,9 +84,12 @@ declare interface optionStatic {
|
||||
debugDelay?: number; // The delay in debug mode is 200ms by default
|
||||
interval?: number; // Timer interval is 200ms by default
|
||||
disableMenu?: boolean; // Whether to disable the right-click menu The default is true
|
||||
stopIntervalTime?: number; // Waiting time to cancel monitoring on mobile
|
||||
}
|
||||
```
|
||||
|
||||
Note: The disableMenu parameter is invalid under ie, because the right button under ie will block the main process and cannot monitor
|
||||
|
||||
### 3.2 md5 and tk bypass disable
|
||||
|
||||
The combination of key and md5 in the library allows developers to bypass the disabling online.
|
||||
|
13
helper/mod-minjs.js
Normal file
13
helper/mod-minjs.js
Normal file
@ -0,0 +1,13 @@
|
||||
|
||||
const util = require('./util');
|
||||
|
||||
function main () {
|
||||
var file = 'npm/disable-devtool.min.js';
|
||||
util.read(file, (code) => {
|
||||
util.write(file, code.replace(/[a-z]\){/i, (str) => {
|
||||
let n = str[0];
|
||||
return `${str}var _f=${n};${n}=function(){return _f().default};`;
|
||||
}));
|
||||
});
|
||||
}
|
||||
main();
|
15
helper/testcdn.html
Normal file
15
helper/testcdn.html
Normal file
@ -0,0 +1,15 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>Disable Devtool Demo</title>
|
||||
</head>
|
||||
<body>
|
||||
<script id='disable-devtool'
|
||||
md5='d4de605ccb923b7e876b3218a1474653'
|
||||
tk-name='tk'
|
||||
src="../npm/disable-devtool.min.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -1,6 +1,13 @@
|
||||
let fs = require('fs');
|
||||
|
||||
module.exports = {
|
||||
read: function (file, cb) {
|
||||
fs.readFile(file, 'utf8', (err, code) => {
|
||||
if (err) throw err;
|
||||
cb(code);
|
||||
});
|
||||
},
|
||||
|
||||
write: function (file, txt, cb) {
|
||||
fs.writeFile(file, txt, 'utf8', (err) => {
|
||||
if (err) throw err;
|
||||
|
21
helper/version.md
Normal file
21
helper/version.md
Normal file
@ -0,0 +1,21 @@
|
||||
# Version Log:
|
||||
|
||||
## 0.0.1
|
||||
1. 支持可配置是否禁用右键菜单
|
||||
2. 禁用 f12 和 ctrl+shift+i 快捷键
|
||||
3. 支持识别从浏览器菜单栏打开开发者工具并关闭当前页面
|
||||
4. 开发者可以绕过禁用 (url参数使用tk配合md5加密)
|
||||
5. 支持几乎所有浏览器
|
||||
6. 高度可配置
|
||||
7. 使用极简、体积小巧 (仅6kb)
|
||||
8. 支持npm引用和script标签引用(属性配置)
|
||||
|
||||
## 0.0.2
|
||||
1. 解决cdn文件无效的bug
|
||||
|
||||
## 0.0.3
|
||||
1. 解决alert等原生方法会影响debug计时导致
|
||||
2. 解决页面且后台会影响debug计时导致
|
||||
3. 兼容ie,disableMenu参数在ie下无效,因为ie下右键会阻塞主进程,且无法监听
|
||||
4. 增加config.stopIntervalTime 表示在移动端时取消监视的等待时长
|
||||
5. 优化判断开发者工具打开的逻辑
|
@ -20,7 +20,7 @@
|
||||
<a href="https://www.github.com/theajack/disable-devtool"><img src="https://img.shields.io/librariesio/dependent-repos/npm/disable-devtool.svg" alt="Dependent"></a>
|
||||
</p>
|
||||
|
||||
**[English](https://github.com/theajack/disable-devtool/blob/master/helper/README.en.md) | [在线试用/文档](https://theajack.gitee.io/disable-devtool) | [Gitee](https://gitee.com/theajack/disable-devtool)**
|
||||
**[English](https://github.com/theajack/disable-devtool/blob/master/README.md) | [在线试用/文档](https://theajack.gitee.io/disable-devtool) | [更新日志](https://github.com/theajack/disable-devtool/blob/master/helper/version.md) | [Gitee](https://gitee.com/theajack/disable-devtool)**
|
||||
|
||||
## 1. 快速使用
|
||||
|
||||
@ -52,10 +52,11 @@ disable-devtool 可以禁用所有一切可以进入开发者工具的方法,
|
||||
2. 禁用 f12 和 ctrl+shift+i 快捷键
|
||||
3. 支持识别从浏览器菜单栏打开开发者工具并关闭当前页面
|
||||
4. 开发者可以绕过禁用 (url参数使用tk配合md5加密)
|
||||
5. 支持几乎所有浏览器
|
||||
5. 支持几乎所有浏览器(包含IE)
|
||||
6. 高度可配置
|
||||
7. 使用极简、体积小巧 (仅6kb)
|
||||
8. 支持npm引用和script标签引用(属性配置)
|
||||
9. 识别真移动端与浏览器开发者工具设置插件伪造的移动端,为移动端节省性能
|
||||
|
||||
## 3. 使用
|
||||
|
||||
@ -84,9 +85,12 @@ declare interface optionStatic {
|
||||
debugDelay?: number; // debug模式时的延迟 默认200ms
|
||||
interval?: number; // 定时器的时间间隔 默认200ms
|
||||
disableMenu?: boolean; // 是否禁用右键菜单 默认为true
|
||||
stopIntervalTime?: number; // 在移动端时取消监视的等待时长
|
||||
}
|
||||
```
|
||||
|
||||
备注:disableMenu参数在ie下无效,因为ie下右键会阻塞主进程,且无法监听
|
||||
|
||||
### 3.2 md5 与 tk 绕过禁用
|
||||
|
||||
该库中使用 key 与 md5 配合的方式使得开发者可以在线上绕过禁用。
|
||||
|
@ -19,7 +19,7 @@
|
||||
<a href="https://www.github.com/theajack/disable-devtool"><img src="https://img.shields.io/librariesio/dependent-repos/npm/disable-devtool.svg" alt="Dependent"></a>
|
||||
</p>
|
||||
|
||||
**[中文](https://github.com/theajack/disable-devtool/blob/master/README.cn.md) | [online trial/document](https://theajack.gitee.io/disable-devtool) | [Gitee](https://gitee.com/theajack/disable-devtool)**
|
||||
**[中文](https://github.com/theajack/disable-devtool/blob/master/README.cn.md) | [online trial/document](https://theajack.gitee.io/disable-devtool) | [Version Log](https://github.com/theajack/disable-devtool/blob/master/helper/version.md) | [Gitee](https://gitee.com/theajack/disable-devtool)**
|
||||
|
||||
## 1. Quick use
|
||||
|
||||
@ -51,10 +51,11 @@ The library has the following features:
|
||||
2. Disable f12 and ctrl+shift+i shortcuts
|
||||
3. Support recognition to open the developer tools from the browser menu bar and close the current page
|
||||
4. Developers can bypass the disablement (use tk and md5 encryption for url parameters)
|
||||
5. Support almost all browsers
|
||||
5. Support almost all browsers (Include IE)
|
||||
6. Highly configurable
|
||||
7. Minimal use, small size (only 6kb)
|
||||
8. Support npm reference and script tag reference (attribute configuration)
|
||||
9. Identify the real mobile terminal and browser developer tool settings plug-in forged mobile terminal, saving performance for the mobile terminal
|
||||
|
||||
## 3. Use
|
||||
|
||||
@ -83,9 +84,12 @@ declare interface optionStatic {
|
||||
debugDelay?: number; // The delay in debug mode is 200ms by default
|
||||
interval?: number; // Timer interval is 200ms by default
|
||||
disableMenu?: boolean; // Whether to disable the right-click menu The default is true
|
||||
stopIntervalTime?: number; // Waiting time to cancel monitoring on mobile
|
||||
}
|
||||
```
|
||||
|
||||
Note: The disableMenu parameter is invalid under ie, because the right button under ie will block the main process and cannot monitor
|
||||
|
||||
### 3.2 md5 and tk bypass disable
|
||||
|
||||
The combination of key and md5 in the library allows developers to bypass the disabling online.
|
||||
|
2
npm/disable-devtool.min.js
vendored
2
npm/disable-devtool.min.js
vendored
File diff suppressed because one or more lines are too long
15
npm/index.d.ts
vendored
15
npm/index.d.ts
vendored
@ -1,11 +1,12 @@
|
||||
declare interface optionStatic {
|
||||
md5?: string;
|
||||
url?: string;
|
||||
tkName?: string;
|
||||
ondevtoolopen?(): void; // ondevtoolopen 优先级高于 url
|
||||
debugDelay?: number;
|
||||
interval?: number;
|
||||
disableMenu?: boolean;
|
||||
md5?: string; // 绕过禁用的md5值,详情见3.2,默认不启用绕过禁用
|
||||
url?: string; // 关闭页面失败时的跳转页面,默认值为localhost
|
||||
tkName?: string; // 绕过禁用时的url参数名称,默认为 ddtk
|
||||
ondevtoolopen?(): void; // 开发者面板打开的回调,启用时url参数无效
|
||||
debugDelay?: number; // debug模式时的延迟 默认200ms
|
||||
interval?: number; // 定时器的时间间隔 默认200ms
|
||||
disableMenu?: boolean; // 是否禁用右键菜单 默认为true ie下无效
|
||||
stopIntervalTime?: number; // 在移动端时取消监视的等待时长
|
||||
}
|
||||
declare interface DDTStatic {
|
||||
(option?: optionStatic): void;
|
||||
|
@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "disable-devtool",
|
||||
"version": "0.0.2",
|
||||
"version": "0.0.3",
|
||||
"description": "Disable web developer tools from the f12 button, right-click and browser ",
|
||||
"main": "disable-devtool.min.js",
|
||||
"scripts": {
|
||||
"dev": "webpack-dev-server --open --config webpack-config/dev.js",
|
||||
"start": "npm run dev",
|
||||
"build": "webpack --config webpack-config/build.js",
|
||||
"build": "webpack --config webpack-config/build.js && node helper/mod-minjs.js",
|
||||
"publish": "npm publish npm",
|
||||
"lint": "eslint src --ext js"
|
||||
},
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "disable-devtool",
|
||||
"version": "0.0.1",
|
||||
"version": "0.0.3",
|
||||
"description": "Disable web developer tools from the f12 button, right-click and browser ",
|
||||
"main": "disable-devtool.min.js",
|
||||
"unpkg": "disable-devtool.min.js",
|
||||
@ -13,7 +13,7 @@
|
||||
"scripts": {
|
||||
"dev": "webpack-dev-server --open --config webpack-config/dev.js",
|
||||
"start": "npm run dev",
|
||||
"build": "webpack --config webpack-config/build.js",
|
||||
"build": "webpack --config webpack-config/build.js && node helper/mod-minjs.js",
|
||||
"publish": "npm publish npm",
|
||||
"lint": "eslint src --ext js"
|
||||
},
|
||||
|
@ -4,8 +4,9 @@ import disableDevtool from '../src';
|
||||
disableDevtool({
|
||||
md5: 'd4de605ccb923b7e876b3218a1474653',
|
||||
// url: 'https://www.qq.com',
|
||||
ondevtoolopen: () => {
|
||||
// window.location.href = 'https://www.qq.com';
|
||||
},
|
||||
// ondevtoolopen: () => {
|
||||
// window.location.href = 'https://www.qq.com';
|
||||
// },
|
||||
interval: 1000,
|
||||
tkName: 'xx',
|
||||
});
|
@ -3,11 +3,12 @@ import {closeWindow} from './util';
|
||||
export let config = {
|
||||
md5: '',
|
||||
ondevtoolopen: closeWindow, // ondevtoolopen 优先级高于 url
|
||||
url: 'http://localhost',
|
||||
url: '',
|
||||
tkName: 'ddtk',
|
||||
debugDelay: 200,
|
||||
interval: 200,
|
||||
disableMenu: true
|
||||
disableMenu: true, // 该参数ie下无效,ie 右键菜单会阻塞线程影响debug延迟计算 禁用右键菜单
|
||||
stopIntervalTime: 5000, // 在移动端时取消监视的等待时长
|
||||
};
|
||||
|
||||
export function mergeConfig (opts = {}) {
|
||||
|
15
src/index.d.ts
vendored
15
src/index.d.ts
vendored
@ -1,11 +1,12 @@
|
||||
declare interface optionStatic {
|
||||
md5?: string;
|
||||
url?: string;
|
||||
tkName?: string;
|
||||
ondevtoolopen?(): void; // ondevtoolopen 优先级高于 url
|
||||
debugDelay?: number;
|
||||
interval?: number;
|
||||
disableMenu?: boolean;
|
||||
md5?: string; // 绕过禁用的md5值,详情见3.2,默认不启用绕过禁用
|
||||
url?: string; // 关闭页面失败时的跳转页面,默认值为localhost
|
||||
tkName?: string; // 绕过禁用时的url参数名称,默认为 ddtk
|
||||
ondevtoolopen?(): void; // 开发者面板打开的回调,启用时url参数无效
|
||||
debugDelay?: number; // debug模式时的延迟 默认200ms
|
||||
interval?: number; // 定时器的时间间隔 默认200ms
|
||||
disableMenu?: boolean; // 是否禁用右键菜单 默认为true ie下无效
|
||||
stopIntervalTime?: number; // 在移动端时取消监视的等待时长
|
||||
}
|
||||
declare interface DDTStatic {
|
||||
(option?: optionStatic): void;
|
||||
|
@ -1,11 +1,19 @@
|
||||
import {config} from './config';
|
||||
import {isPC} from './util';
|
||||
import {hackAlert, isPC, onPageShowHide} from './util';
|
||||
|
||||
let interval = null, timer = null;
|
||||
let calls = [];
|
||||
|
||||
export function initInterval () {
|
||||
let _pause = false;
|
||||
let pause = () => {_pause = true;};
|
||||
let goon = () => {_pause = false;};
|
||||
hackAlert(pause, goon); // 防止 alert等方法触发了debug延迟计算
|
||||
onPageShowHide(goon, pause); // 防止切后台触发了debug延迟计算
|
||||
|
||||
interval = window.setInterval(() => {
|
||||
console.log(1);
|
||||
if (_pause) return;
|
||||
calls.forEach(fn => {fn();});
|
||||
}, config.interval);
|
||||
// 两秒之后判断 如果不是pc去掉定时器interval,为了优化移动端的性能
|
||||
@ -14,7 +22,7 @@ export function initInterval () {
|
||||
if (!isPC()) {
|
||||
clearInterval();
|
||||
}
|
||||
}, 2000);
|
||||
}, config.stopIntervalTime);
|
||||
}
|
||||
|
||||
export function registInterval (fn) {
|
||||
|
@ -1,16 +1,23 @@
|
||||
import {config} from './config';
|
||||
import {isIE} from './util';
|
||||
|
||||
export function disableKeyAndMenu () {
|
||||
window.addEventListener('keydown', (e) => {
|
||||
if (e.keyCode === 123 || (e.shiftKey && e.ctrlKey && e.keyCode === 73)) {
|
||||
e = e || window.event;
|
||||
let keyCode = e.keyCode || e.which;
|
||||
// alert(e.keyCode);
|
||||
if (keyCode === 123 || (e.shiftKey && e.ctrlKey && e.keyCode === 73)) {
|
||||
e.returnValue = false;
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
if (config.disableMenu) {
|
||||
}, false);
|
||||
if (config.disableMenu || isIE()) { // ie 右键菜单会阻塞线程影响debug延迟计算 禁用右键菜单
|
||||
window.addEventListener('contextmenu', (e) => {
|
||||
e = e || window.event;
|
||||
e.returnValue = false;
|
||||
e.preventDefault();
|
||||
return false;
|
||||
});
|
||||
}, false);
|
||||
}
|
||||
}
|
23
src/main.js
23
src/main.js
@ -6,9 +6,7 @@ import md5 from './md5';
|
||||
|
||||
export function disableDevtool (opts) {
|
||||
mergeConfig(opts);
|
||||
if (checkTk()) {
|
||||
return;
|
||||
}
|
||||
if (checkTk()) {return;}
|
||||
initInterval();
|
||||
disableKeyAndMenu();
|
||||
initDevTool();
|
||||
@ -32,17 +30,19 @@ function checkTk () {
|
||||
return false;
|
||||
}
|
||||
|
||||
let disableDebug = false; // 当 initDevTool 方式生效时,去除debug断点
|
||||
|
||||
function initDebugger () {
|
||||
let fn = new Function('debugger');
|
||||
let last = getNowTime();
|
||||
let debug = new Function('debugger');
|
||||
registInterval(() => {
|
||||
fn();
|
||||
let now = getNowTime();
|
||||
if (disableDebug) {
|
||||
return;
|
||||
}
|
||||
var last = getNowTime();
|
||||
debug();
|
||||
// interval 时间是 config.interval,设置config.debugDelay是为了给一个执行的时间
|
||||
if (now - last > config.interval + config.debugDelay) {
|
||||
if (getNowTime() - last > config.interval + config.debugDelay) {
|
||||
onDevToolOpen();
|
||||
} else {
|
||||
last = now;
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -53,11 +53,13 @@ function initDevTool () {
|
||||
if (isFF) {
|
||||
toTest = /./;
|
||||
toTest.toString = function () {
|
||||
disableDebug = true;
|
||||
onDevToolOpen();
|
||||
};
|
||||
} else {
|
||||
toTest = new Image();
|
||||
toTest.__defineGetter__('id', function () {
|
||||
disableDebug = true;
|
||||
onDevToolOpen();
|
||||
});
|
||||
}
|
||||
@ -87,5 +89,4 @@ function checkScriptUse () {
|
||||
disableDevtool(json);
|
||||
}
|
||||
|
||||
|
||||
checkScriptUse();
|
92
src/util.js
92
src/util.js
@ -6,11 +6,18 @@ export function isPC () {
|
||||
|
||||
export function closeWindow () {
|
||||
// 需要是有js跳转到这个页面才可以关闭这个页面
|
||||
window.opener = null;
|
||||
window.open('', '_self');
|
||||
window.close();
|
||||
if (config.url) {
|
||||
window.location.href = config.url;
|
||||
} else {
|
||||
window.opener = null;
|
||||
window.open('', '_self');
|
||||
window.close();
|
||||
window.history.back();
|
||||
setTimeout(() => {
|
||||
window.location.href = 'http://localhost';
|
||||
}, 100);
|
||||
}
|
||||
// 否则执行跳转到 url
|
||||
window.location.href = config.url;
|
||||
}
|
||||
|
||||
export function getNowTime () {
|
||||
@ -45,4 +52,81 @@ export function formatName (name) {
|
||||
}
|
||||
return c;
|
||||
}).join('');
|
||||
}
|
||||
|
||||
|
||||
export function onPageShowHide (onshow, onhide) {
|
||||
var hidden, state, visibilityChange;
|
||||
if (typeof document.hidden !== 'undefined') {
|
||||
hidden = 'hidden';
|
||||
visibilityChange = 'visibilitychange';
|
||||
state = 'visibilityState';
|
||||
} else if (typeof document.mozHidden !== 'undefined') {
|
||||
hidden = 'mozHidden';
|
||||
visibilityChange = 'mozvisibilitychange';
|
||||
state = 'mozVisibilityState';
|
||||
} else if (typeof document.msHidden !== 'undefined') {
|
||||
hidden = 'msHidden';
|
||||
visibilityChange = 'msvisibilitychange';
|
||||
state = 'msVisibilityState';
|
||||
} else if (typeof document.webkitHidden !== 'undefined') {
|
||||
hidden = 'webkitHidden';
|
||||
visibilityChange = 'webkitvisibilitychange';
|
||||
state = 'webkitVisibilityState';
|
||||
}
|
||||
var cb = function () {
|
||||
if (document[state] === hidden) {
|
||||
onhide();
|
||||
} else {
|
||||
onshow();
|
||||
}
|
||||
};
|
||||
document.removeEventListener(visibilityChange, cb, false);
|
||||
document.addEventListener(visibilityChange, cb, false);
|
||||
}
|
||||
|
||||
export function hackAlert (before, after) {
|
||||
let _alert = window.alert;
|
||||
let _confirm = window.confirm;
|
||||
let _prompt = window.prompt;
|
||||
let mod = (fn) => {
|
||||
return (...args) => {
|
||||
if (before) {before();}
|
||||
fn(...args);
|
||||
if (after) {after();}
|
||||
};
|
||||
};
|
||||
window.alert = mod(_alert);
|
||||
window.confirm = mod(_confirm);
|
||||
window.prompt = mod(_prompt);
|
||||
}
|
||||
|
||||
export function isIE () {
|
||||
var userAgent = navigator.userAgent; // 取得浏览器的userAgent字符串
|
||||
var isIE = userAgent.indexOf('compatible') > -1 && userAgent.indexOf('MSIE') > -1; // 判断是否IE<11浏览器
|
||||
var isEdge = userAgent.indexOf('Edge') > -1 && !isIE; // 判断是否IE的Edge浏览器
|
||||
var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf('rv:11.0') > -1;
|
||||
return isIE || isEdge || isIE11;
|
||||
// if (isIE) {
|
||||
// var reIE = new RegExp('MSIE (\\d+\\.\\d+);');
|
||||
// reIE.test(userAgent);
|
||||
// var fIEVersion = parseFloat(RegExp['$1']);
|
||||
// if (fIEVersion == 7) {
|
||||
// return 7;
|
||||
// } else if (fIEVersion == 8) {
|
||||
// return 8;
|
||||
// } else if (fIEVersion == 9) {
|
||||
// return 9;
|
||||
// } else if (fIEVersion == 10) {
|
||||
// return 10;
|
||||
// } else {
|
||||
// return 6;// IE版本<=7
|
||||
// }
|
||||
// } else if (isEdge) {
|
||||
// return 'edge';// edge
|
||||
// } else if (isIE11) {
|
||||
// return 11; // IE11
|
||||
// } else {
|
||||
// return -1;// 不是ie浏览器
|
||||
// }
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user