web防止别人任意调试, 目前有一些局限性, 即当把控制台的detectivate breakpoints按钮点亮后此方法即刻失效.
已验证toString方法,在较新版本的浏览器中也无效果.
你可以把它当作你的工具函数,在需要不让别人轻易调试的项目中引用
//此判断时在vue3的环境中使用, 仅当不是DEV时开启, 方便开发
if (!import.meta.env.DEV) {
const emitEvent = (isOpen, orientation) => {
window.dispatchEvent(new CustomEvent('devtoolsChange', {
detail: {
isOpen,
orientation
}
}));
};
(function () {
'use strict';
const devtools = {
isOpen: false,
orientation: undefined
};
const threshold = 160;
const main = ({ emitEvents = true } = {}) => {
//
var timeLimit = 50;
var open = false;
var startTime = new Date();
debugger;
if (new Date() - startTime > timeLimit) {
open = true;
emitEvent(true, "");
} else {
open = false
}
const widthThreshold = window.outerWidth - window.innerWidth > threshold;
const heightThreshold = window.outerHeight - window.innerHeight > threshold;
const orientation = widthThreshold ? 'vertical' : 'horizontal';
if (
!(heightThreshold && widthThreshold) &&
((window.Firebug && window.Firebug.chrome && window.Firebug.chrome.isInitialized) || widthThreshold || heightThreshold)
) {
if ((!devtools.isOpen || devtools.orientation !== orientation) && emitEvents) {
emitEvent(true, orientation);
}
devtools.isOpen = true;
devtools.orientation = orientation;
} else {
if (devtools.isOpen && emitEvents) {
emitEvent(false, undefined);
}
devtools.isOpen = false;
devtools.orientation = undefined;
}
};
main({ emitEvents: false });
setInterval(main, 500);
if (typeof module !== 'undefined' && module.exports) {
module.exports = devtools;
} else {
window.devtools = devtools;
}
})();
}
window.addEventListener('devtoolsChange', event => {
const { isOpen } = event.detail;
if (isOpen) {
let text = "检测到非法调试,您的信息将被上传并通知网站管理方,有关人员将进行调查,请关闭调试窗口后刷新重试!";
document.body.innerHTML = "<h1 style='color:black'>" + text + "</h1><hr>" + "<h1 style='color:white'>" + text + "</h1>";
}
});
推荐加密后使用,加密网站推荐 https://www.bejson.com/encrypt/jsobfuscate/
如果要求严格的防审查策略,可以尝试使用如下库, 该库更新比较频繁,具有一定参考价值: https://github.com/fz6m/console-ban
网友评论